Projects
Kolab:16:Testing:Candidate
roundcubemail-plugins-kolab
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 55
View file
roundcubemail-plugins-kolab.spec
Changed
@@ -41,9 +41,9 @@ %global dash_rel_suffix %{?rc_rel_suffix:-%{rc_rel_suffix}} Name: roundcubemail-plugins-kolab -Version: 3.4.4 +Version: 3.4.5 -Release: 2%{?dot_rel_suffix}%{?dist} +Release: 1%{?dot_rel_suffix}%{?dist} Summary: Kolab Groupware plugins for Roundcube Webmail @@ -2792,6 +2792,9 @@ %defattr(-,root,root,-) %changelog +* Tue May 7 2019 Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> - 3.4.5-1 +- Release of version 3.4.5 + * Fri Apr 19 2019 Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> - 3.4.4-2 - Fix Free/Busy URL
View file
debian.changelog
Changed
@@ -1,3 +1,9 @@ +roundcubemail-plugins-kolab (1:3.4.5-0~kolab1) unstable; urgency=low + + * Release of version 3.4.5 + + -- Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Tue, 7 May 2019 11:11:11 +0200 + roundcubemail-plugins-kolab (1:3.4.4-0~kolab2) unstable; urgency=low * Release of version 3.4.4
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/calendar/calendar.php -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/calendar/calendar.php
Changed
@@ -188,13 +188,13 @@ // add 'Create event' item to message menu if ($this->api->output->type == 'html' && $_GET'_rel' != 'event') { - $this->api->add_content(html::tag('li', null, + $this->api->add_content(html::tag('li', array('role' => 'menuitem'), $this->api->output->button(array( 'command' => 'calendar-create-from-mail', 'label' => 'calendar.createfrommail', 'type' => 'link', 'classact' => 'icon calendarlink active', - 'class' => 'icon calendarlink', + 'class' => 'icon calendarlink disabled', 'innerclass' => 'icon calendar', ))), 'messagemenu'); @@ -979,8 +979,7 @@ case "remove": // remove previous deletes $undo_time = $this->driver->undelete ? $this->rc->config->get('undo_timeout', 0) : 0; - $this->rc->session->remove('calendar_event_undo'); - + // search for event if only UID is given if (!isset($event'calendar') && $event'uid') { if (!($event = $this->driver->get_event($event, calendar_driver::FILTER_WRITEABLE))) { @@ -989,11 +988,12 @@ $undo_time = 0; } + // Note: the driver is responsible for setting $_SESSION'calendar_event_undo' + // containing 'ts' and 'data' elements $success = $this->driver->remove_event($event, $undo_time < 1); $reload = (!$success || $event'_savemode') ? 2 : 1; if ($undo_time > 0 && $success) { - $_SESSION'calendar_event_undo' = array('ts' => time(), 'data' => $event); // display message with Undo link. $msg = html::span(null, $this->gettext('successremoval')) . ' ' . html::a(array('onclick' => sprintf("%s.http_request('event', 'action=undo', %s.display_message('', 'loading'))", @@ -1047,16 +1047,14 @@ case "undo": // Restore deleted event - $event = $_SESSION'calendar_event_undo''data'; - - if ($event) + if ($event = $_SESSION'calendar_event_undo''data') $success = $this->driver->restore_event($event); if ($success) { $this->rc->session->remove('calendar_event_undo'); $this->rc->output->show_message('calendar.successrestore', 'confirmation'); $got_msg = true; - $reload = 2; + $reload = 2; } break; @@ -2960,7 +2958,7 @@ 'type' => 'link', 'wrapper' => 'li', 'command' => 'attachment-save-calendar', - 'class' => 'icon calendarlink', + 'class' => 'icon calendarlink disabled', 'classact' => 'icon calendarlink active', 'innerclass' => 'icon calendar', 'label' => 'calendar.savetocalendar',
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/calendar/calendar_ui.js -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/calendar/calendar_ui.js
Changed
@@ -317,7 +317,7 @@ if (String(css'border-color').match(/^#?f+$/i)) delete css'border-color'; - $.each(css, function(i, v) { if (!v) delete cssi; if (v.charAt(0) != '#') cssi = '#' + v; }); + $.each(css, function(i, v) { if (!v) delete cssi; else if (v.charAt(0) != '#') cssi = '#' + v; }); if (mode == 'list') { bg_color = css'background-color'; @@ -527,7 +527,13 @@ } } - var buttons = ; + var buttons = , is_removable_event = function(event, calendar) { + // for invitation calendars check permissions of the original folder + if (event._folder_id) + calendar = me.calendarsevent._folder_id; + return calendar && me.has_permission(calendar, 'td'); + }; + if (!temp && calendar.editable && event.editable !== false) { buttons.push({ text: rcmail.gettext('edit', 'calendar'), @@ -537,7 +543,8 @@ } }); } - if (!temp && me.has_permission(calendar, 'td') && event.editable !== false) { + + if (!temp && is_removable_event(event, calendar) && event.editable !== false) { buttons.push({ text: rcmail.gettext('delete', 'calendar'), 'class': 'delete', @@ -565,7 +572,7 @@ open: function() { $dialog.attr('aria-hidden', 'false'); setTimeout(function(){ - $dialog.parent().find('button:not(.ui-dialog-titlebar-close)').first().focus(); + $dialog.parent().find('button:not(.ui-dialog-titlebar-close,.delete)').first().focus(); }, 5); }, beforeClose: function(e) { @@ -2587,6 +2594,7 @@ if (!data) data = event; var decline = false, notify = false, html = '', cal = me.calendarsevent.calendar, + _is_invitation = String(event.calendar).match(/^--invitation--(declined|pending)/) && RegExp.$1, _has_attendees = me.has_attendees(event), _is_attendee = _has_attendees && me.is_attendee(event), _is_organizer = me.is_organizer(event); @@ -2595,19 +2603,19 @@ if (_has_attendees) { var checked = (settings.itip_notify & 1 ? ' checked="checked"' : ''); - if (action == 'remove' && cal.group != 'shared' && !_is_organizer && _is_attendee) { + if (action == 'remove' && cal.group != 'shared' && !_is_organizer && _is_attendee && _is_invitation != 'declined') { decline = true; checked = event.status != 'CANCELLED' ? checked : ''; html += '<div class="message dialog-message ui alert boxwarning">' + - '<label><input class="confirm-attendees-decline" type="checkbox"' + checked + ' value="1" name="decline" /> ' + - rcmail.gettext('itipdeclineevent', 'calendar') + + '<label><input class="confirm-attendees-decline pretty-checkbox" type="checkbox"' + checked + ' value="1" name="decline" /> ' + + rcmail.gettext('itipdeclineevent', 'calendar') + '</label></div>'; } else if (_is_organizer) { notify = true; if (settings.itip_notify & 2) { html += '<div class="message dialog-message ui alert boxwarning">' + - '<label><input class="confirm-attendees-donotify" type="checkbox"' + checked + ' value="1" name="notify" /> ' + + '<label><input class="confirm-attendees-donotify pretty-checkbox" type="checkbox"' + checked + ' value="1" name="notify" /> ' + rcmail.gettext((action == 'remove' ? 'sendcancellation' : 'sendnotifications'), 'calendar') + '</label></div>'; } @@ -2615,7 +2623,7 @@ data._notify = settings.itip_notify; } } - else if (cal.group != 'shared') { + else if (cal.group != 'shared' && !_is_invitation) { html += '<div class="message dialog-message ui alert boxwarning">' + $('#edit-localchanges-warning').html() + '</div>'; data._notify = 0; } @@ -3217,7 +3225,10 @@ function update_view(view, event, source) { var existing = view.fullCalendar('clientEvents', event._id); if (existing.length) { + delete existing0.temp; + delete existing0.editable; $.extend(existing0, event); + view.fullCalendar('updateEvent', existing0); // remove old recurrence instances if (event.recurrence && !event.recurrence_id) @@ -3254,16 +3265,13 @@ // add/update single event object else if (source && p.update) { var event = p.update; - event.temp = false; - event.editable = 0; // update main view - event.editable = source.editable; update_view(fc, event, source); // update the currently displayed event dialog if ($('#eventshow').is(':visible') && me.selected_event && me.selected_event.id == event.id) - event_show_dialog(event) + event_show_dialog(event); } // refetch all calendars else if (p.refetch) { @@ -4224,7 +4232,7 @@ } dp.height('auto').removeClass('ui-dialog-content ui-widget-content') .data('dialog-parent', dp.closest('.ui-dialog')) - .appendTo('#layout > div.sidebar'); + .appendTo('#layout-sidebar'); } else if (!in_dialog && dp.length && width <= 768 && dp.data('dialog-parent')) { dp.addClass('ui-dialog-content ui-widget-content') @@ -4277,12 +4285,12 @@ $('#timezone-display').appendTo($('.fc-header-toolbar > .fc-center')).removeClass('hidden'); $('#agendaoptions').detach().insertAfter('.fc-header-toolbar'); - $('.content-frame-navigation a.button.date').appendTo('.content > .searchbar'); + $('.content-frame-navigation a.button.date').appendTo('#layout-content > .searchbar'); // Mobile header title if (window.MutationObserver) { var title = $('.fc-header-toolbar > .fc-center h2'), - mobile_header = $('#layout > .content > .header > .header-title'), + mobile_header = $('#layout-content > .header > .header-title'), callback = function() { var text = title.text(); mobile_header.html('').append(
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/calendar/composer.json -> roundcubemail-plugins-kolab-3.4.5.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.4.4", + "version": "3.4.5", "authors": { "name": "Thomas Bruederli",
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/calendar/drivers/kolab/kolab_calendar.php -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/calendar/drivers/kolab/kolab_calendar.php
Changed
@@ -342,6 +342,7 @@ if ($virtual && !empty($event'recurrence') && is_array($event'recurrence''EXCEPTIONS')) { foreach ($event'recurrence''EXCEPTIONS' as $exception) { if ($event'_instance' == $exception'_instance') { + unset($exception'calendar', $exception'className', $exception'_folder_id'); // clone date objects from main event before adjusting them with exception data if (is_object($event'start')) $event'start' = clone $record'start'; if (is_object($event'end')) $event'end' = clone $record'end'; @@ -406,10 +407,12 @@ } /** + * Get number of events in the given calendar * * @param integer Date range start (unix timestamp) * @param integer Date range end (unix timestamp) * @param array Additional query to filter events + * * @return integer Count */ public function count_events($start, $end = null, $filter_query = null) @@ -432,7 +435,7 @@ // query Kolab storage $query = array('dtend', '>=', $start); - + if ($end) $query = array('dtstart', '<=', $end); @@ -455,7 +458,7 @@ * Create a new event record * * @see calendar_driver::new_event() - * + * * @return mixed The created record ID on success, False on error */ public function insert_event($event) @@ -495,9 +498,9 @@ * Update a specific event record * * @see calendar_driver::new_event() + * * @return boolean True on success, False on error */ - public function update_event($event, $exception_id = null) { $updated = false; @@ -541,6 +544,7 @@ * Delete an event record * * @see calendar_driver::remove_event() + * * @return boolean True on success, False on error */ public function delete_event($event, $force = true) @@ -549,9 +553,8 @@ if (!$deleted) { rcube::raise_error(array( - 'code' => 600, 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => sprintf("Error deleting event object '%s' from Kolab server", $event'id')), + 'code' => 600, 'file' => __FILE__, 'line' => __LINE__, + 'message' => sprintf("Error deleting event object '%s' from Kolab server", $event'id')), true, false); } @@ -562,18 +565,21 @@ * Restore deleted event record * * @see calendar_driver::undelete_event() + * * @return boolean True on success, False on error */ public function restore_event($event) { - if ($this->storage->undelete($event'id')) { + // Make sure this is not an instance identifier + $uid = preg_replace('/-\d{8}(T\d{6})?$/', '', $event'id'); + + if ($this->storage->undelete($uid)) { return true; } else { rcube::raise_error(array( - 'code' => 600, 'type' => 'php', - 'file' => __FILE__, 'line' => __LINE__, - 'message' => "Error undeleting the event object $eventid from the Kolab server"), + 'code' => 600, 'file' => __FILE__, 'line' => __LINE__, + 'message' => sprintf("Error undeleting the event object '%s' from the Kolab server", $event'id')), true, false); } @@ -613,7 +619,7 @@ { $object = $event'_formatobj'; if (!$object) { - $rec = $this->storage->get_object($event'id'); + $rec = $this->storage->get_object($event'uid' ?: $event'id'); $object = $rec'_formatobj'; } @@ -749,6 +755,9 @@ { $record'calendar' = $this->id; + // remove (possibly outdated) cached parameters + unset($record'_folder_id', $record'className'); + if ($links && !array_key_exists('links', $record)) { $record'links' = $this->get_links($record'uid'); } @@ -828,18 +837,23 @@ $event'comment' = $old'comment'; } + // remove some internal properties which should not be cached + $cleanup_fn = function(&$event) { + unset($event'_savemode', $event'_fromcalendar', $event'_identity', $event'_folder_id', + $event'calendar', $event'className', $event'recurrence_id', + $event'_attachments', $event'attachments', $event'deleted_attachments'); + }; + + $cleanup_fn($event); + // clean up exception data if (is_array($event'exceptions')) { - array_walk($event'exceptions', function(&$exception) { - unset($exception'_mailbox', $exception'_msguid', $exception'_formatobj', $exception'_attachments', - $event'attachments', $event'deleted_attachments', $event'recurrence_id'); + array_walk($event'exceptions', function(&$exception) use ($cleanup_fn) { + unset($exception'_mailbox', $exception'_msguid', $exception'_formatobj'); + $cleanup_fn($exception); }); } - // remove some internal properties which should not be saved - unset($event'_savemode', $event'_fromcalendar', $event'_identity', $event'_folder_id', - $event'recurrence_id', $event'attachments', $event'deleted_attachments', $event'className'); - // copy meta data (starting with _) from old object foreach ((array)$old as $key => $val) { if (!isset($event$key) && $key0 == '_')
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/calendar/drivers/kolab/kolab_driver.php -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/calendar/drivers/kolab/kolab_driver.php
Changed
@@ -91,18 +91,12 @@ $this->calendars = array(); foreach ($folders as $folder) { - if ($folder instanceof kolab_storage_folder_user) { - $calendar = new kolab_user_calendar($folder, $this->cal); - $calendar->subscriptions = count($folder->children) > 0; - } - else { - $calendar = new kolab_calendar($folder->name, $this->cal); - } - + $calendar = $this->_to_calendar($folder); if ($calendar->ready) { $this->calendars$calendar->id = $calendar; - if ($calendar->editable) + if ($calendar->editable) { $this->has_writeable = true; + } } } @@ -110,6 +104,26 @@ } /** + * Convert kolab_storage_folder into kolab_calendar + */ + private function _to_calendar($folder) + { + if ($folder instanceof kolab_calendar) { + return $folder; + } + + if ($folder instanceof kolab_storage_folder_user) { + $calendar = new kolab_user_calendar($folder, $this->cal); + $calendar->subscriptions = count($folder->children) > 0; + } + else { + $calendar = new kolab_calendar($folder->name, $this->cal); + } + + return $calendar; + } + + /** * Get a list of available calendars from this source * * @param integer $filter Bitmask defining filter criterias @@ -129,17 +143,17 @@ } } - $delim = $this->rc->get_storage()->get_hierarchy_delimiter(); - $folders = $this->filter_calendars($filter); + $delim = $this->rc->get_storage()->get_hierarchy_delimiter(); + $folders = $this->filter_calendars($filter); $calendars = array(); // include virtual folders for a full folder tree if (!is_null($tree)) $folders = kolab_storage::folder_hierarchy($folders, $tree); + $parents = array_keys($this->calendars); + foreach ($folders as $id => $cal) { - $fullname = $cal->get_name(); - $listname = $cal->get_foldername(); $imap_path = explode($delim, $cal->name); // find parent @@ -147,72 +161,60 @@ array_pop($imap_path); $parent_id = kolab_storage::folder_id(join($delim, $imap_path)); } - while (count($imap_path) > 1 && !$this->calendars$parent_id); + while (count($imap_path) > 1 && !in_array($parent_id, $parents)); // restore "real" parent ID - if ($parent_id && !$this->calendars$parent_id) { + if ($parent_id && !in_array($parent_id, $parents)) { $parent_id = kolab_storage::folder_id($cal->get_parent()); } - // turn a kolab_storage_folder object into a kolab_calendar - if ($cal instanceof kolab_storage_folder) { - $cal = new kolab_calendar($cal->name, $this->cal); - $this->calendars$cal->id = $cal; - } + $parents = $cal->id; - // special handling for user or virtual folders - if ($cal instanceof kolab_storage_folder_user) { + if ($cal->virtual) { $calendars$cal->id = array( 'id' => $cal->id, - 'name' => $fullname, - 'listname' => $listname, - 'editname' => $cal->get_foldername(), - 'color' => $cal->get_color(), - 'active' => $cal->is_active(), - 'title' => $cal->get_title(), - 'owner' => $cal->get_owner(), - 'history' => false, - 'virtual' => false, - 'editable' => false, - 'group' => 'other', - 'class' => 'user', - 'removable' => true, - ); - } - else if ($cal->virtual) { - $calendars$cal->id = array( - 'id' => $cal->id, - 'name' => $fullname, - 'listname' => $listname, + 'name' => $cal->get_name(), + 'listname' => $cal->get_foldername(), 'editname' => $cal->get_foldername(), 'virtual' => true, 'editable' => false, - 'group' => $cal->get_namespace(), - 'class' => 'folder', + 'group' => $cal->get_namespace(), ); } else { + // additional folders may come from kolab_storage::folder_hierarchy() above + // make sure we deal with kolab_calendar instances + $cal = $this->_to_calendar($cal); + $this->calendars$cal->id = $cal; + + $is_user = ($cal instanceof kolab_user_calendar); + $calendars$cal->id = array( - 'id' => $cal->id, - 'name' => $fullname, - 'listname' => $listname, - 'editname' => $cal->get_foldername(), - 'title' => $cal->get_title(), - 'color' => $cal->get_color(), - 'editable' => $cal->editable, - 'rights' => $cal->rights, - 'showalarms' => $cal->alarms, - 'history' => !empty($this->bonnie_api), - 'group' => $cal->get_namespace(), - 'default' => $cal->default, - 'active' => $cal->is_active(), - 'owner' => $cal->get_owner(), - 'children' => true, // TODO: determine if that folder indeed has child folders - 'parent' => $parent_id, - 'subtype' => $cal->subtype, - 'caldavurl' => $cal->get_caldav_url(), + 'id' => $cal->id, + 'name' => $cal->get_name(), + 'listname' => $cal->get_foldername(), + 'editname' => $cal->get_foldername(), + 'title' => $cal->get_title(), + 'color' => $cal->get_color(), + 'editable' => $cal->editable, + 'group' => $is_user ? 'other user' : $cal->get_namespace(), + 'active' => $cal->is_active(), + 'owner' => $cal->get_owner(), 'removable' => !$cal->default, ); + + if (!$is_user) { + $calendars$cal->id += array( + 'default' => $cal->default, + 'rights' => $cal->rights, + 'showalarms' => $cal->alarms, + 'history' => !empty($this->bonnie_api), + 'children' => true, // TODO: determine if that folder indeed has child folders + 'parent' => $parent_id, + 'subtype' => $cal->subtype, + 'caldavurl' => $cal->get_caldav_url(), + ); + } } if ($cal->subscriptions) { @@ -224,7 +226,6 @@ if ($this->rc->config->get('kolab_invitation_calendars') && !($filter & self::FILTER_INSERTABLE)) { foreach (array(self::INVITATIONS_CALENDAR_PENDING, self::INVITATIONS_CALENDAR_DECLINED) as $id) { $cal = new kolab_invitation_calendar($id, $this->cal); - $this->calendars$cal->id = $cal; if (!($filter & self::FILTER_ACTIVE) || $cal->is_active()) { $calendars$id = array( 'id' => $cal->id, @@ -268,7 +269,7 @@ 'active' => (bool)$prefs$id'active', 'showalarms' => (bool)$this->rc->config->get('calendar_birthdays_alarm_type'), 'group' => 'x-birthdays', - 'editable' => false, + 'editable' => false, 'default' => false, 'children' => false, 'history' => false, @@ -337,11 +338,11 @@ return $calendars; } - /** * Get the kolab_calendar instance for the given calendar ID * * @param string Calendar identifier (encoded imap folder name) + * * @return object kolab_calendar Object nor null if calendar doesn't exist */ public function get_calendar($id) @@ -351,9 +352,10 @@ // create calendar object if necesary if (!$this->calendars$id) { if (in_array($id, array(self::INVITATIONS_CALENDAR_PENDING, self::INVITATIONS_CALENDAR_DECLINED))) { - $this->calendars$id = new kolab_invitation_calendar($id, $this->cal); + return new kolab_invitation_calendar($id, $this->cal); } - else if ($id !== self::BIRTHDAY_CALENDAR_ID) { + // for unsubscribed calendar folders + if ($id !== self::BIRTHDAY_CALENDAR_ID) { $calendar = kolab_calendar::factory($id, $this->cal); if ($calendar->ready) { $this->calendars$calendar->id = $calendar; @@ -370,13 +372,15 @@ * @param array Hash array with calendar properties * name: Calendar name * color: The color of the calendar + * * @return mixed ID of the calendar on success, False on error */ public function create_calendar($prop) { - $prop'type' = 'event'; - $prop'active' = true; + $prop'type' = 'event'; + $prop'active' = true; $prop'subscribed' = true; + $folder = kolab_storage::folder_update($prop); if ($folder === false) { @@ -775,21 +779,26 @@ */ public function remove_event($event, $force = true) { - $ret = true; - $success = false; + $ret = true; + $success = false; $savemode = $event'_savemode'; $decline = $event'_decline'; + if (!$force) { + unset($event'attendees'); + $this->rc->session->remove('calendar_event_undo'); + $this->rc->session->remove('calendar_restore_event_data'); + $sess_data = $event; + } + if (($storage = $this->get_calendar($event'calendar')) && ($event = $storage->get_event($event'id'))) { $event'_savemode' = $savemode; $savemode = 'all'; - $master = $event; - - $this->rc->session->remove('calendar_restore_event_data'); + $master = $event; // read master if deleting a recurring event if ($event'recurrence' || $event'recurrence_id' || $event'isexception') { - $master = $storage->get_event($event'uid'); + $master = $storage->get_event($event'uid'); $savemode = $event'_savemode' ?: ($event'_instance' || $event'isexception' ? 'current' : 'all'); // force 'current' mode for single occurrences stored as exception @@ -817,23 +826,8 @@ case 'current': $_SESSION'calendar_restore_event_data' = $master; - // removing the first instance => just move to next occurence - if ($master'recurrence' && $event'_instance' == libcalendaring::recurrence_instance_identifier($master)) { - $recurring = reset($storage->get_recurring_events($event, $event'start', null, $event'id' . '-1', 1)); - - // no future instances found: delete the master event (bug #1677) - if (!$recurring'start') { - $success = $storage->delete_event($master, $force); - break; - } - - $master'start' = $recurring'start'; - $master'end' = $recurring'end'; - if ($master'recurrence''COUNT') - $master'recurrence''COUNT'--; - } // remove the matching RDATE entry - else if ($master'recurrence''RDATE') { + if ($master'recurrence''RDATE') { foreach ($master'recurrence''RDATE' as $j => $rdate) { if ($rdate->format('Ymd') == $event'start'->format('Ymd')) { unset($master'recurrence''RDATE'$j); @@ -841,9 +835,10 @@ } } } - else { // add exception to master event - $master'recurrence''EXDATE' = $event'start'; - } + + // add exception to master event + $master'recurrence''EXDATE' = $event'start'; + $success = $storage->update_event($master); break; @@ -851,7 +846,7 @@ $master'_instance' = libcalendaring::recurrence_instance_identifier($master); if ($master'_instance' != $event'_instance') { $_SESSION'calendar_restore_event_data' = $master; - + // set until-date on master event $master'recurrence''UNTIL' = clone $event'start'; $master'recurrence''UNTIL'->sub(new DateInterval('P1D')); @@ -881,10 +876,10 @@ if (!empty($event'recurrence_date') && empty($master'recurrence') && !empty($master'exceptions')) { // make the first exception the new master $newmaster = array_shift($master'exceptions'); - $newmaster'exceptions' = $master'exceptions'; + $newmaster'exceptions' = $master'exceptions'; $newmaster'_attachments' = $master'_attachments'; - $newmaster'_mailbox' = $master'_mailbox'; - $newmaster'_msguid' = $master'_msguid'; + $newmaster'_mailbox' = $master'_mailbox'; + $newmaster'_msguid' = $master'_msguid'; $success = $storage->update_event($newmaster); } @@ -901,8 +896,18 @@ } } + if ($success && !$force) { + if ($master'_folder_id') + $sess_data'_folder_id' = $master'_folder_id'; + $_SESSION'calendar_event_undo' = array('ts' => time(), 'data' => $sess_data); + } + if ($success && $this->freebusy_trigger) - $this->rc->output->command('plugin.ping_url', array('action' => 'calendar/push-freebusy', 'source' => $storage->id)); + $this->rc->output->command('plugin.ping_url', array( + 'action' => 'calendar/push-freebusy', + // _folder_id may be set by invitations calendar + 'source' => $master'_folder_id' ?: $storage->id, + )); return $success ? $ret : false; } @@ -911,20 +916,26 @@ * Restore a single deleted event * * @param array Hash array with event properties: - * id: Event identifier + * id: Event identifier + * calendar: Event calendar + * * @return boolean True on success, False on error */ public function restore_event($event) { if ($storage = $this->get_calendar($event'calendar')) { if (!empty($_SESSION'calendar_restore_event_data')) - $success = $storage->update_event($_SESSION'calendar_restore_event_data'); + $success = $storage->update_event($event = $_SESSION'calendar_restore_event_data'); else $success = $storage->restore_event($event); - + if ($success && $this->freebusy_trigger) - $this->rc->output->command('plugin.ping_url', array('action' => 'calendar/push-freebusy', 'source' => $storage->id)); - + $this->rc->output->command('plugin.ping_url', array( + 'action' => 'calendar/push-freebusy', + // _folder_id may be set by invitations calendar + 'source' => $event'_folder_id' ?: $storage->id, + )); + return $success; }
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/calendar/drivers/kolab/kolab_invitation_calendar.php -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/calendar/drivers/kolab/kolab_invitation_calendar.php
Changed
@@ -176,16 +176,31 @@ $event = $this->cal->driver->get_event($id, calendar_driver::FILTER_WRITEABLE); if (is_array($event)) { - // add pointer to original calendar folder - $event'_folder_id' = $event'calendar'; - $event = $this->_mod_event($event); + $event = $this->_mod_event($event, $event'calendar'); } return $event; } /** + * Create instances of a recurring event + * + * @see kolab_calendar::get_recurring_events() + */ + public function get_recurring_events($event, $start, $end = null, $event_id = null, $limit = null) + { + // forward call to the actual storage folder + if ($event'_folder_id') { + $cal = $this->cal->driver->get_calendar($event'_folder_id'); + if ($cal && $cal->ready) { + return $cal->get_recurring_events($event, $start, $end, $event_id, $limit); + } + } + } + + /** * Get attachment body + * * @see calendar_driver::get_attachment_body() */ public function get_attachment_body($id, $event) @@ -212,11 +227,12 @@ } /** - * @param integer Event's new start (unix timestamp) - * @param integer Event's new end (unix timestamp) - * @param string Search query (optional) - * @param boolean Include virtual events (optional) - * @param array Additional parameters to query storage + * @param integer Event's new start (unix timestamp) + * @param integer Event's new end (unix timestamp) + * @param string Search query (optional) + * @param boolean Include virtual events (optional) + * @param array Additional parameters to query storage + * * @return array A list of event records */ public function list_events($start, $end, $search = null, $virtual = 1, $query = array()) @@ -251,7 +267,7 @@ } if ($match) { - $events$event'id' ?: $event'uid' = $this->_mod_event($event); + $events$event'id' ?: $event'uid' = $this->_mod_event($event, $cal->id); } } @@ -263,12 +279,15 @@ } /** + * Get number of events in the given calendar + * + * @param integer Date range start (unix timestamp) + * @param integer Date range end (unix timestamp) + * @param array Additional query to filter events * - * @param integer Date range start (unix timestamp) - * @param integer Date range end (unix timestamp) * @return integer Count */ - public function count_events($start, $end = null) + public function count_events($start, $end = null, $filter = null) { // get email addresses of the current user $user_emails = $this->cal->get_user_emails(); @@ -309,7 +328,7 @@ /** * Helper method to modify some event properties */ - private function _mod_event($event) + private function _mod_event($event, $calendar_id = null) { // set classes according to PARTSTAT $event = kolab_driver::add_partstat_class($event, $this->partstats); @@ -318,15 +337,18 @@ $event'calendar' = $this->id; } + // add pointer to original calendar folder + if ($calendar_id) { + $event'_folder_id' = $calendar_id; + } + return $event; } /** * Create a new event record * - * @see calendar_driver::new_event() - * - * @return mixed The created record ID on success, False on error + * @see kolab_calendar::insert_event() */ public function insert_event($event) { @@ -336,8 +358,7 @@ /** * Update a specific event record * - * @see calendar_driver::new_event() - * @return boolean True on success, False on error + * @see kolab_calendar::update_event() */ public function update_event($event, $exception_id = null) { @@ -355,22 +376,36 @@ /** * Delete an event record * - * @see calendar_driver::remove_event() - * @return boolean True on success, False on error + * @see kolab_calendar::delete_event() */ public function delete_event($event, $force = true) { + // forward call to the actual storage folder + if ($event'_folder_id') { + $cal = $this->cal->driver->get_calendar($event'_folder_id'); + if ($cal && $cal->ready) { + return $cal->delete_event($event, $force); + } + } + return false; } /** * Restore deleted event record * - * @see calendar_driver::undelete_event() - * @return boolean True on success, False on error + * @see kolab_calendar::restore_event() */ public function restore_event($event) { + // forward call to the actual storage folder + if ($event'_folder_id') { + $cal = $this->cal->driver->get_calendar($event'_folder_id'); + if ($cal && $cal->ready) { + return $cal->restore_event($event); + } + } + return false; } }
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/calendar/drivers/kolab/kolab_user_calendar.php -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/calendar/drivers/kolab/kolab_user_calendar.php
Changed
@@ -260,10 +260,12 @@ } /** + * Get number of events in the given calendar + * + * @param integer Date range start (unix timestamp) + * @param integer Date range end (unix timestamp) + * @param array Additional query to filter events * - * @param integer Date range start (unix timestamp) - * @param integer Date range end (unix timestamp) - * @param array Additional query to filter events * @return integer Count */ public function count_events($start, $end = null, $filter_query = null)
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/calendar/skins/elastic/templates/calendar.html -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/calendar/skins/elastic/templates/calendar.html
Changed
@@ -4,7 +4,7 @@ <h1 class="voice"><roundcube:label name="calendar.calendar" /></h1> <!-- calendars list --> -<div class="sidebar listbox" role="navigation" aria-labelledby="arial-label-calendars"> +<div id="layout-sidebar" class="listbox" role="navigation" aria-labelledby="arial-label-calendars"> <div class="header"> <a class="button icon back-content-button" href="#back" data-hidden="big"><span class="inner"><roundcube:label name="back" /></span></a> <span id="aria-label-calendars" class="header-title"><roundcube:label name="calendar.calendars" /></span> @@ -12,7 +12,7 @@ title="calendar.calendaractions" class="button icon sidebar-menu" data-popup="calendaractions-menu" innerClass="inner" label="actions" /> </div> - <roundcube:object name="libkolab.folder_search_form" id="calendarlistsearch" wrapper="searchbar toolbar" + <roundcube:object name="libkolab.folder_search_form" id="calendarlistsearch" wrapper="searchbar menu" ariatag="h2" label="calsearchform" label-domain="calendar" buttontitle="findcalendars" /> <div id="calendars-content" class="scroller"> <roundcube:object name="plugin.calendar_list" id="calendarslist" class="treelist listing iconized" /> @@ -22,14 +22,14 @@ </div> <!-- calendar --> -<div class="content selected no-navbar" role="main"> +<div id="layout-content" class="selected no-navbar" role="main"> <h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2> <div class="header" role="toolbar" aria-labelledby="aria-label-toolbar"> - <a class="button icon menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a> + <a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a> <a class="button icon back-sidebar-button folders" href="#sidebar" data-hidden="big"><span class="inner"><roundcube:label name="calendar.calendars" /></span></a> <span class="header-title"></span> <!-- toolbar --> - <div id="calendartoolbar" class="toolbar"> + <div id="calendartoolbar" class="toolbar menu"> <roundcube:button command="addevent" type="link" class="button create disabled" classAct="button create" label="create" title="calendar.new_event" innerClass="inner" /> @@ -46,14 +46,14 @@ <roundcube:container name="toolbar" id="calendartoolbar" /> </div> </div> - <roundcube:object name="plugin.searchform" id="searchform" wrapper="searchbar toolbar" + <roundcube:object name="plugin.searchform" id="searchform" wrapper="searchbar menu" label="searchform" buttontitle="calendar.findevents" label-domain="calendar" ariatag="h2" /> <h2 id="aria-label-calendarview" class="voice"><roundcube:label name="calendar.arialabelcalendarview" /></h2> <div id="calendar" class="content" role="main" aria-labelledby="aria-label-calendarview" data-elastic-mode="true"> <roundcube:object name="plugin.agenda_options" id="agendaoptions" /> <div id="searchcontrols" class="search-controls"></div> </div> - <div class="footer toolbar content-frame-navigation" role="toolbar" data-hidden="big"> + <div class="footer toolbar menu content-frame-navigation" role="toolbar" data-hidden="big"> <a href="#" class="button prev" onclick="$('.fc-prev-button').click()"><span class="inner"><roundcube:label name="previous" /></span></a> <a href="#" class="button today" onclick="$('.fc-today-button').click()"><span class="inner"><roundcube:label name="today" /></span></a> <a href="#" class="button date" onclick="window.calendar_datepicker()"><span class="inner"><roundcube:label name="date" /></span></a> @@ -140,7 +140,7 @@ <div id="calendaractions-menu" class="popupmenu"> <h3 id="aria-label-calendaroptions" class="voice"><roundcube:label name="calendar.calendaractions" /></h3> - <ul class="toolbarmenu listing" role="menu" aria-labelledby="aria-label-calendaroptions"> + <ul class="menu listing" role="menu" aria-labelledby="aria-label-calendaroptions"> <roundcube:button type="link-menuitem" command="calendar-create" label="calendar.addcalendar" class="create disabled" classAct="create active" /> <roundcube:button type="link-menuitem" command="calendar-edit" label="calendar.editcalendar" class="edit disabled" classAct="edit active" /> <roundcube:button type="link-menuitem" command="calendar-delete" label="calendar.deletecalendar" class="delete disabled" classAct="delete active" /> @@ -159,7 +159,7 @@ <div id="eventoptionsmenu" class="popupmenu"> <h3 id="aria-label-eventoptions" class="voice"><roundcube:label name="calendar.eventoptions" /></h3> - <ul class="toolbarmenu listing" role="menu" aria-labelledby="aria-label-eventoptions"> + <ul class="menu listing" role="menu" aria-labelledby="aria-label-eventoptions"> <roundcube:button type="link-menuitem" command="event-download" label="download" class="download disabled" classAct="download active" /> <roundcube:button type="link-menuitem" command="event-sendbymail" label="send" class="send disabled" classAct="send active" /> <roundcube:button type="link-menuitem" command="event-copy" label="copy" class="copy disabled" classAct="copy active" /> @@ -176,7 +176,7 @@ <span class="header-title"><roundcube:label name="calendar.tabresources" /></span> </div> <roundcube:object name="plugin.resources_searchform" id="resourcesearchbox" - wrapper="searchbar toolbar" ariatag="h4" buttontitle="calendar.findresources" + wrapper="searchbar menu" ariatag="h4" buttontitle="calendar.findresources" label="resourcesearchform" label-domain="calendar" /> <div class="scroller"> <roundcube:object name="plugin.resources_list" id="resources-list" class="listing treelist" />
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_2fa/composer.json -> roundcubemail-plugins-kolab-3.4.5.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": "3.4.4", + "version": "3.4.5", "authors": { "name": "Thomas Bruederli",
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_2fa/skins/elastic/templates/config.html -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_2fa/skins/elastic/templates/config.html
Changed
@@ -4,12 +4,12 @@ <h1 class="voice"><roundcube:label name="kolab_2fa.settingstitle" /></h1> -<div class="content selected no-navbar" role="main"> +<div id="layout-content" class="selected no-navbar" role="main"> <h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2> <div class="header" role="toolbar" aria-labelledby="aria-label-toolbar"> <a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a> <span class="header-title"><roundcube:label name="kolab_2fa.settingstitle" /></span> - <div class="toolbar"></div> + <div class="toolbar menu"></div> </div> <div class="scroller frame-content"> <p class="addfactor">
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_activesync/composer.json -> roundcubemail-plugins-kolab-3.4.5.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.4.2", + "version": "3.4.5", "authors": { "name": "Thomas Bruederli",
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_activesync/skins/elastic/templates/config.html -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_activesync/skins/elastic/templates/config.html
Changed
@@ -5,7 +5,7 @@ <h1 class="voice"><roundcube:label name="kolab_activesync.tabtitle" /></h1> <!-- devices list --> -<div class="list listbox selected" aria-labelledby="aria-label-deviceslist"> +<div id="layout-list" class="listbox selected" aria-labelledby="aria-label-deviceslist"> <div class="header"> <a class="button icon back-sidebar-button" href="#sidebar"><span class="inner"><roundcube:label name="settings" /></span></a> <span id="aria-label-deviceslist" class="header-title"><roundcube:label name="kolab_activesync.devices" /></span> @@ -18,15 +18,15 @@ </div> <!-- device info frame --> -<div class="content" role="main"> +<div id="layout-content" role="main"> <h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2> <div class="header" role="toolbar" aria-labelledby="aria-label-toolbar"> <a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a> <span class="header-title"></span> <!-- toolbar --> - <div class="toolbar"> + <div class="toolbar menu"> <roundcube:button command="plugin.delete-device" type="link" - class="button delete disabled" classAct="button delete" + class="delete disabled" classAct="button delete" label="delete" title="kolab_activesync.deletedevice" innerclass="inner" /> </div> </div>
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_addressbook/composer.json -> roundcubemail-plugins-kolab-3.4.5.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.4.3", + "version": "3.4.5", "authors": { "name": "Thomas Bruederli",
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_addressbook/kolab_addressbook.php -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_addressbook/kolab_addressbook.php
Changed
@@ -88,7 +88,7 @@ if ($this->bonnie_api) { $this->add_button(array( 'command' => 'contact-history-dialog', - 'class' => 'history contact-history', + 'class' => 'history contact-history disabled', 'classact' => 'history contact-history active', 'innerclass' => 'icon inner', 'label' => 'kolab_addressbook.showhistory', @@ -831,10 +831,9 @@ } $ldap_public = $this->rc->config->get('ldap_public'); - $abook_type = $this->rc->config->get('address_book_type'); // Hide option if there's no global addressbook - if (empty($ldap_public) || $abook_type != 'ldap') { + if (empty($ldap_public)) { return $args; } @@ -1126,9 +1125,8 @@ // Make sure any global addressbooks are defined if ($abook_prio == 0 || $abook_prio == 2) { $ldap_public = $this->rc->config->get('ldap_public'); - $abook_type = $this->rc->config->get('address_book_type'); - if (empty($ldap_public) || $abook_type != 'ldap') { + if (empty($ldap_public)) { $abook_prio = 1; } }
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_addressbook/skins/elastic/templates/search_addon.html -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_addressbook/skins/elastic/templates/search_addon.html
Changed
@@ -1,4 +1,4 @@ -<roundcube:object name="libkolab.folder_search_form" id="addressbooksearch" wrapper="searchbar toolbar" +<roundcube:object name="libkolab.folder_search_form" id="addressbooksearch" wrapper="searchbar menu" ariatag="h2" label="foldersearchform" label-domain="kolab_addressbook" buttontitle="findaddressbooks" /> <script>
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_auth/composer.json -> roundcubemail-plugins-kolab-3.4.5.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.4.4", + "version": "3.4.5", "authors": { "name": "Thomas Bruederli",
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_auth/kolab_auth.php -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_auth/kolab_auth.php
Changed
@@ -874,11 +874,15 @@ $username = sprintf('%s (as user %s)', $username, $login_as); } + // Don't log full session id for better security + $session_id = session_id(); + $session_id = $session_id ? substr($session_id, 0, 16) : 'no-session'; + $message = sprintf( "Failed login for %s from %s in session %s %s", $username, rcube_utils::remote_ip(), - session_id() ?: 'no-session', + $session_id, $message ? "($message)" : '' );
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_chat/composer.json -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_chat/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Chat integration plugin", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.4.0", + "version": "3.4.5", "authors": { "name": "Aleksander Machniak",
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_chat/skins/elastic/templates/chat.html -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_chat/skins/elastic/templates/chat.html
Changed
@@ -3,9 +3,9 @@ <h1 class="voice"><roundcube:label name="kolab_chat.chat" /></h1> -<div class="content selected no-navbar" role="main"> +<div id="layout-content" class="selected no-navbar" role="main"> <div class="header" data-hidden="lbs"> - <a class="button icon menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a> + <a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a> <span class="header-title"><roundcube:label name="kolab_chat.chat" /></span> </div> <div class="iframe-wrapper">
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_delegation/composer.json -> roundcubemail-plugins-kolab-3.4.5.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.4.0", + "version": "3.4.5", "authors": { "name": "Aleksander Machniak",
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_delegation/skins/elastic/templates/settings.html -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_delegation/skins/elastic/templates/settings.html
Changed
@@ -5,7 +5,7 @@ <h1 class="voice"><roundcube:label name="kolab_delegation.tabtitle" /></h1> <!-- devices list --> -<div class="list listbox selected" aria-labelledby="aria-label-delegateslist"> +<div id="layout-list" class="listbox selected" aria-labelledby="aria-label-delegateslist"> <div class="header"> <a class="button icon back-sidebar-button" href="#sidebar"><span class="inner"><roundcube:label name="settings" /></span></a> <span id="aria-label-delegateslist" class="header-title"><roundcube:label name="kolab_delegation.delegates" /></span> @@ -15,19 +15,16 @@ <roundcube:object name="plugin.delegatelist" id="delegate-table" class="listing" role="listbox" data-label-msg="listempty" data-label-ext="listusebutton" data-create-command="delegate-add" /> </div> -<!-- - <div class="footer"></div> ---> </div> <!-- delegatee info frame --> -<div class="content" role="main"> +<div id="layout-content" role="main"> <h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2> <div class="header" role="toolbar" aria-labelledby="aria-label-toolbar"> <a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a> <span class="header-title"></span> <!-- toolbar --> - <div class="toolbar"> + <div class="toolbar menu"> <roundcube:button command="delegate-add" type="link" label="create" title="kolab_delegation.adddelegate" class="button create disabled" classAct="button create" innerClass="inner" />
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_files/composer.json -> roundcubemail-plugins-kolab-3.4.5.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.4.4", + "version": "3.4.5", "authors": { "name": "Aleksander Machniak",
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_files/skins/elastic/templates/compose_plugin.html -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_files/skins/elastic/templates/compose_plugin.html
Changed
@@ -6,7 +6,7 @@ <a class="button icon back" href="#back" data-hidden="big" onclick="$('#folderlistbox').hide();$('#filelistcontainer').css('display','flex')"><span class="inner"><roundcube:label name="back" /></span></a> <span class="header-title"><roundcube:label name="folders" /></span> </div> - <roundcube:object name="libkolab.folder_search_form" id="foldersearch" wrapper="searchbar toolbar" + <roundcube:object name="libkolab.folder_search_form" id="foldersearch" wrapper="searchbar menu" ariatag="h5" label="foldersearchform" buttontitle="kolab_files.findfolders" /> <div id="files-folder-list" class="scroller"></div> </div> @@ -15,7 +15,7 @@ <a class="button icon folders" href="#sidebar" data-hidden="big" onclick="$('#filelistcontainer').hide();$('#folderlistbox').css('display','flex')"><span class="inner"><roundcube:label name="folders" /></span></a> <span class="header-title" data-hidden="big" ><roundcube:label name="kolab_files.selectfiles" /></span> </div> - <roundcube:object name="file-search-form" id="filesearchbox" wrapper="searchbar toolbar" + <roundcube:object name="file-search-form" id="filesearchbox" wrapper="searchbar menu" label="searchform" buttontitle="kolab_files.findfiles" label-domain="kolab_files" ariatag="h3" options="filesearchmenu" /> <div id="filesearchmenu" class="hidden searchoptions scroller propform formcontainer" aria-labelledby="aria-label-search-menu" aria-controls="filelist">
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_files/skins/elastic/templates/docedit.html -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_files/skins/elastic/templates/docedit.html
Changed
@@ -2,32 +2,28 @@ <h1 class="voice"><roundcube:var name="env:filename" /></h1> -<div class="content selected editor-<roundcube:var name="env:editor_type" />"> +<div id="layout-content" class="selected editor-<roundcube:var name="env:editor_type" />"> <h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2> <div class="header document-editor-header" role="toolbar" aria-labelledby="aria-label-toolbar"> <a class="button icon members" href="#members" onclick="kolab_files_members_list(this)" data-hidden="big"> <span class="inner"><roundcube:label name="kolab_files.arialabelcollaborators"></span> </a> <span class="header-title constant"><roundcube:var name="env:filename" /></span> - <div class="toolbar"> - <roundcube:button command="document-close" type="link" - class="button delete disabled" classAct="button delete" + <div class="toolbar menu"> + <roundcube:button command="document-close" type="link" class="delete disabled" classAct="delete" label="kolab_files.terminate" title="kolab_files.terminatesession" innerClass="inner" /> <span class="dropbutton"> - <roundcube:button command="document-export" type="link" - class="button export disabled" classAct="button export" + <roundcube:button command="document-export" type="link" class="export disabled" classAct="export" label="kolab_files.get" title="kolab_files.getfile" innerClass="inner" /> - <a href="#export" class="button dropdown" id="exportmenulink" data-popup="export-menu" tabindex="0"> + <a href="#export" class="dropdown" id="exportmenulink" data-popup="export-menu" tabindex="0"> <span class="inner"><roundcubemail:label name="kolab_files.exportoptions" /><span> </a> </span> <roundcube:if condition="env:editor_type == 'wopi'" /> - <roundcube:button command="document-print" type="link" - class="button print disabled" classAct="button print" + <roundcube:button command="document-print" type="link" class="print disabled" classAct="print" label="print" title="kolab_files.printfile" innerClass="inner" data-hidden="small" /> <roundcube:endif /> - <roundcube:button command="document-save" type="link" - class="button save disabled" classAct="button save" + <roundcube:button command="document-save" type="link" class="save disabled" classAct="save" label="kolab_files.save" title="kolab_files.savefile" innerClass="inner" data-hidden="small" /> </div> <roundcube:if condition="env:editor_type != 'wopi'" /> @@ -48,18 +44,17 @@ <roundcube:object name="filepreviewframe" id="fileframe" role="main" title="kolab_files.arialabelfilecontent" aria-labelledby="aria-label-filecontent" /> </div> - <div class="footer toolbar hidden-big"> - <roundcube:button command="document-save" type="link" - class="button save disabled" classAct="button save" + <div class="footer toolbar menu hidden-big"> + <roundcube:button command="document-save" type="link" class="save disabled" classAct="save" label="kolab_files.save" title="kolab_files.savefile" innerClass="inner" /> <roundcube:button name="close-window" type="link" onclick="parent.$('.ui-dialog:visible button.cancel').click()" - class="button cancel" label="cancel" title="cancel" innerClass="inner" /> + class="cancel" label="cancel" title="cancel" innerClass="inner" /> </div> </div> <div id="export-menu" class="popupmenu"> <h3 id="aria-label-exportmenu" class="voice"><roundcube:label name="kolab_files.arialabelexportoptions" /></h3> - <ul id="exportmenu-menu" class="toolbarmenu listing" role="menu" aria-labelledby="aria-label-exportmenu"></ul> + <ul id="exportmenu-menu" class="menu listing" role="menu" aria-labelledby="aria-label-exportmenu"></ul> </div> <div id="document-editors-dialog" class="popupmenu editors-dialog" data-editable="true" role="dialog" aria-labelledby="aria-label-doceditorsdialog">
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_files/skins/elastic/templates/filepreview.html -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_files/skins/elastic/templates/filepreview.html
Changed
@@ -2,7 +2,7 @@ <h1 class="voice"><roundcube:var name="env:filename" /></h1> -<div class="sidebar listbox"> +<div id="layout-sidebar" class="listbox"> <div class="header"> <a class="button icon back-content-button" href="#content" data-hidden="big"><span class="inner"><roundcube:label name="back" /></span></a> <span class="header-title" id="aria-label-contentinfo"><roundcube:label name="properties" /></span> @@ -12,38 +12,33 @@ </div> </div> -<div class="content selected"> +<div id="layout-content" class="selected"> <h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2> <div class="header" role="toolbar" aria-labelledby="aria-label-toolbar"> <a class="button icon properties" id="properties-button" href="#properties" onclick="UI.show_sidebar()" data-hidden="big"> <span class="inner"><roundcube:label name="properties"></span> </a> <span class="header-title constant"><roundcube:var name="env:filename" /></span> - <div id="filetoolbar" class="toolbar"> - <roundcube:button command="files-get" type="link" - class="button download disabled" classAct="button download" + <div id="filetoolbar" class="toolbar menu"> + <roundcube:button command="files-get" type="link" class="download disabled" classAct="download" label="kolab_files.get" title="kolab_files.getfile" innerClass="inner" /> - <roundcube:button command="files-edit" type="link" - class="button edit disabled" classAct="button edit" + <roundcube:button command="files-edit" type="link" class="edit disabled" classAct="edit" label="kolab_files.edit" title="kolab_files.editfile" innerClass="inner" data-hidden="small" /> - <roundcube:button command="files-save" type="link" - class="button save disabled" classAct="button save" + <roundcube:button command="files-save" type="link" class="save disabled" classAct="save" label="kolab_files.save" title="kolab_files.savefile" innerClass="inner" style="display:none" data-hidden="small" /> - <roundcube:button command="files-delete" type="link" - class="button delete disabled" classAct="button delete" + <roundcube:button command="files-delete" type="link" class="delete disabled" classAct="delete" label="delete" title="kolab_files.deletefile" innerClass="inner" /> - <roundcube:button command="files-print" type="link" - class="button print disabled" classAct="button print" + <roundcube:button command="files-print" type="link" class="print disabled" classAct="print" label="print" title="kolab_files.printfile" innerClass="inner" data-hidden="small" /> <roundcube:if condition="stripos(env:mimetype, 'image/') === 0" /> <roundcube:button command="image-scale" type="link" prop="+" data-hidden="small" - class="button zoomin disabled" classAct="button zoomin" + class="zoomin disabled" classAct="zoomin" label="zoomin" title="increaseimage" innerclass="inner" /> <roundcube:button command="image-scale" type="link" prop="-" data-hidden="small" - class="button zoomout disabled" classAct="button zoomout" + class="zoomout disabled" classAct="zoomout" label="zoomout" title="decreaseimage" innerclass="inner" /> <roundcube:button command="image-rotate" type="link" - class="button rotate disabled" classAct="button rotate" data-hidden="small" + class="rotate disabled" classAct="rotate" data-hidden="small" label="rotate" title="rotateimage" innerclass="inner" /> <roundcube:endif /> </div> @@ -55,15 +50,15 @@ <roundcube:if condition="stripos(env:mimetype, 'image/') === 0" /> <div id="image-tools" class="image-tools" data-hidden="big"> <h3 id="aria-label-imagetools" class="voice"><roundcube:label name="arialabelimagetools" /></h3> - <div class="toolbar" role="menu" aria-labelledby="aria-label-imagetools"> + <div class="toolbar menu" role="menu" aria-labelledby="aria-label-imagetools"> <roundcube:button command="image-scale" type="link" prop="+" - class="button zoomin disabled" classAct="button zoomin" + class="zoomin disabled" classAct="zoomin" label="zoomin" title="increaseimage" innerclass="inner" /> <roundcube:button command="image-scale" type="link" prop="-" - class="button zoomout disabled" classAct="button zoomout" + class="zoomout disabled" classAct="zoomout" label="zoomout" title="decreaseimage" innerclass="inner" /> <roundcube:button command="image-rotate" type="link" - class="button rotate disabled" classAct="button rotate" + class="rotate disabled" classAct="rotate" label="rotate" title="rotateimage" innerclass="inner" /> </div> <a href="#" class="button icon tools" onclick="$(this).attr('title', $(this).data('label-' + ($('#image-tools').toggleClass('open').is('.open') ? 'hide' : 'show')))"
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_files/skins/elastic/templates/files.html -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_files/skins/elastic/templates/files.html
Changed
@@ -4,7 +4,7 @@ <h1 class="voice"><roundcube:label name="kolab_files.files" /></h1> <!-- folders list --> -<div class="sidebar listbox" role="navigation" aria-labelledby="arial-label-folders"> +<div id="layout-sidebar" class="listbox" role="navigation" aria-labelledby="arial-label-folders"> <div class="header"> <a class="button icon back-content-button" href="#back" data-hidden="big"><span class="inner"><roundcube:label name="back" /></span></a> <span id="aria-label-folders" class="header-title"><roundcube:label name="folders" /></span> @@ -12,11 +12,11 @@ title="moreactions" label="actions" class="button icon sidebar-menu" innerClass="inner" data-popup="folderoptions" /> </div> - <roundcube:object name="libkolab.folder_search_form" id="foldersearch" wrapper="searchbar toolbar" + <roundcube:object name="libkolab.folder_search_form" id="foldersearch" wrapper="searchbar menu" ariatag="h2" label="foldersearchform" buttontitle="kolab_files.findfolders" /> <div id="files-folder-list" class="scroller"></div> <roundcube:if condition="env:files_quota" /> - <div class="footer toolbar small"> + <div class="footer small"> <div id="quotadisplay" class="quota-widget"> <span class="voice"><roundcube:label name="quota"></span> <roundcube:object name="filequotadisplay" class="count" display="text" /> @@ -26,45 +26,45 @@ </div> <!-- files --> -<div class="content selected no-navbar" role="main"> +<div id="layout-content" class="selected no-navbar" role="main"> <h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2> <div class="header" role="toolbar" aria-labelledby="aria-label-toolbar"> - <a class="button icon menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a> + <a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a> <a class="button icon back-sidebar-button folders" href="#sidebar" data-hidden="big"><span class="inner"><roundcube:label name="folders" /></span></a> <span class="header-title"></span> <!-- toolbar --> - <div id="filestoolbar" class="toolbar"> + <div id="filestoolbar" class="toolbar menu"> <roundcube:button id="fileslistmenu-link" name="fileslistmenu-link" type="link" onclick="kolab_files_listoptions('files')" - label="options" class="button settings" innerClass="inner" /> + label="options" class="settings" innerClass="inner" /> <roundcube:button id="sessionslistmenu-link" name="sessionslistmenu-link" type="link" onclick="kolab_files_listoptions('sessions')" - label="options" class="button hidden settings" innerClass="inner" /> + label="options" class="hidden settings" innerClass="inner" /> <span class="spacer"></span> <roundcube:button command="files-upload" type="link" onclick="$('#filesuploadform').click()" - class="button upload disabled" classAct="button upload" + class="upload disabled" classAct="upload" label="kolab_files.upload" title="kolab_files.uploadfile" innerClass="inner" /> <roundcube:button command="files-get" type="link" - class="button download disabled" classAct="button download" + class="download disabled" classAct="download" label="kolab_files.get" title="kolab_files.getfile" innerClass="inner" /> <roundcube:button command="files-open" type="link" - class="button open disabled" classAct="button open" + class="open disabled" classAct="open" label="kolab_files.view" title="kolab_files.viewfile" innerClass="inner" /> <roundcube:button command="files-edit" type="link" - class="button edit disabled" classAct="button edit" + class="edit disabled" classAct="edit" label="kolab_files.edit" title="kolab_files.editfile" innerClass="inner" /> <roundcube:button command="files-create" type="link" data-fab="true" - class="button create disabled" classAct="button create" + class="create disabled" classAct="create" label="kolab_files.create" title="kolab_files.createfile" innerClass="inner "/> <roundcube:button command="files-delete" type="link" - class="button delete disabled" classAct="button delete" + class="delete disabled" classAct="delete" label="delete" title="kolab_files.deletefile" innerClass="inner" /> <roundcube:button name="filemenulink" id="filemenulink" type="link" - class="button more" label="more" title="moreactions" + class="more" label="more" title="moreactions" data-popup="file-menu" innerclass="inner" /> </div> </div> - <roundcube:object name="file-search-form" id="searchform" wrapper="searchbar toolbar" + <roundcube:object name="file-search-form" id="searchform" wrapper="searchbar menu" label="searchform" buttontitle="kolab_files.findfiles" label-domain="kolab_files" ariatag="h3" options="filesearchmenu" /> <div id="filesearchmenu" class="hidden searchoptions scroller propform formcontainer" aria-labelledby="aria-label-search-menu" aria-controls="filelist"> @@ -130,16 +130,16 @@ <div id="folderoptions" class="popupmenu" data-editable="true"> <h3 id="aria-label-folderoptions" class="voice"><roundcube:label name="kolab_files.folderoptions" /></h3> - <ul class="toolbarmenu listing" role="menu" aria-labelledby="aria-label-folderoptions"> + <ul class="menu listing" role="menu" aria-labelledby="aria-label-folderoptions"> <roundcube:button type="link-menuitem" command="folder-create" label="kolab_files.addfolder" class="create disabled" classAct="create active" /> - <roundcube:button type="link-menuitem" command="folder-rename" label="kolab_files.folderrename" class="rename" classAct="rename active" /> + <roundcube:button type="link-menuitem" command="folder-rename" label="kolab_files.folderrename" class="rename disabled" classAct="rename active" /> <roundcube:if condition="env:files_api_version > 3" /> - <roundcube:button type="link-menuitem" command="folder-share" label="kolab_files.foldershare" class="share" classAct="share active" /> + <roundcube:button type="link-menuitem" command="folder-share" label="kolab_files.foldershare" class="share disabled" classAct="share active" /> <roundcube:endif /> - <roundcube:button type="link-menuitem" command="files-folder-delete" label="kolab_files.folderdelete" class="delete" classAct="delete active" /> - <roundcube:button type="link-menuitem" command="folders" task="settings" label="managefolders" class="folders" classAct="folders active" /> + <roundcube:button type="link-menuitem" command="files-folder-delete" label="kolab_files.folderdelete" class="delete disabled" classAct="delete active" /> + <roundcube:button type="link-menuitem" command="folders" task="settings" label="managefolders" class="folders disabled" classAct="folders active" /> <roundcube:if condition="!empty(env:external_sources)" /> - <roundcube:button type="link-menuitem" command="folder-mount" label="kolab_files.foldermount" class="mount storage" classAct="mount storage active" /> + <roundcube:button type="link-menuitem" command="folder-mount" label="kolab_files.foldermount" class="mount storage disabled" classAct="mount storage active" /> <roundcube:endif /> </ul> </div> @@ -199,7 +199,7 @@ </div> <div id="dragfilemenu" class="popupmenu"> - <ul class="toolbarmenu listing" role="menu"> + <ul class="menu listing" role="menu"> <roundcube:button type="link-menuitem" command="files-move" onclick="return kolab_files_drag_menu_action('files-move')" label="move" classAct="active" /> <roundcube:button type="link-menuitem" command="files-copy" onclick="return kolab_files_drag_menu_action('files-copy')" label="copy" classAct="active" /> </ul> @@ -207,10 +207,10 @@ <div id="file-menu" class="popupmenu"> <h3 id="aria-label-message-menu" class="voice"><roundcube:label name="kolab_files.arialabelmorefileactions" /></h3> - <ul class="toolbarmenu listing" role="menu" aria-labelledby="aria-label-file-menu"> - <roundcube:button type="link-menuitem" command="files-rename" label="kolab_files.rename" class="rename" classAct="rename active" /> - <roundcube:button type="link-menuitem" command="files-move" label="moveto" class="move" classAct="move active" innerclass="folder-selector-link" aria-haspopup="true" /> - <roundcube:button type="link-menuitem" command="files-copy" label="copyto" class="copy" classAct="copy active" innerclass="folder-selector-link" aria-haspopup="true" /> + <ul class="menu listing" role="menu" aria-labelledby="aria-label-file-menu"> + <roundcube:button type="link-menuitem" command="files-rename" label="kolab_files.rename" class="rename disabled" classAct="rename active" /> + <roundcube:button type="link-menuitem" command="files-move" label="moveto" class="move disabled" classAct="move active" innerclass="folder-selector-link" aria-haspopup="true" /> + <roundcube:button type="link-menuitem" command="files-copy" label="copyto" class="copy disabled" classAct="copy active" innerclass="folder-selector-link" aria-haspopup="true" /> </ul> </div>
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_files/skins/elastic/templates/message_plugin.html -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_files/skins/elastic/templates/message_plugin.html
Changed
@@ -4,7 +4,7 @@ <span class="header-title" data-hidden="small"><roundcube:label name="folders" /></span> <span class="header-title" data-hidden="big"><roundcube:label name="kolab_files.saveto" /></span> </div> - <roundcube:object name="libkolab.folder_search_form" id="foldersearch" wrapper="searchbar toolbar" + <roundcube:object name="libkolab.folder_search_form" id="foldersearch" wrapper="searchbar menu" ariatag="h2" label="foldersearchform" buttontitle="kolab_files.findfolders" /> <h3 id="aria-label-folderlist" class="voice"><roundcube:label name="kolab_files.arialabelfolderlist" /></h3> <div id="files-folder-list" class="scroller" aria-labelledby="aria-label-folderlist" data-no-collections="true"></div>
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_files/skins/elastic/ui.js -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_files/skins/elastic/ui.js
Changed
@@ -2,8 +2,8 @@ { if (p.command == 'files-save') { var toolbar = $('#toolbar-menu'); - $('a.button.edit', toolbar).parent().hide(); - $('a.button.save', toolbar).show().parent().show(); + $('a.edit', toolbar).parent().hide(); + $('a.save', toolbar).show().parent().show(); if (window.editor_edit_button) window.editor_edit_button.addClass('hidden'); @@ -52,7 +52,7 @@ { var dialog = $('<div id="members-dialog" class="session-members"><ul></ul></div>'), title = $(link).text(), - add_button = $('#collaborators a.button.add'), + add_button = $('#collaborators a.add'), save_func = function(e) { add_button.click(); return true; @@ -82,7 +82,7 @@ rcmail.addEventListener('enable-command', kolab_files_enable_command); if (rcmail.env.action == 'open') { - $('#toolbar-menu a.button.save').parent().hide(); + $('#toolbar-menu a.save').parent().hide(); } else if (rcmail.env.action == 'edit') { if (rcmail.env.editor_type == 'wopi' && rcmail.is_framed()) { @@ -104,8 +104,8 @@ // Elastic mobile preview uses an iframe in a dialog if ((rcmail.env.action == 'open' || rcmail.env.editor_type != 'wopi') && rcmail.is_framed()) { - var edit_button = $('#filetoolbar a.button.edit'), - save_button = $('#filetoolbar a.button.save'); + var edit_button = $('#filetoolbar a.edit'), + save_button = $('#filetoolbar a.save'); parent.$('.ui-dialog:visible .ui-dialog-buttonpane .ui-dialog-buttonset').prepend( window.editor_save_button = $('<button type="button">') @@ -125,11 +125,11 @@ else { rcmail.addEventListener('files-folder-select', function(p) { var is_sess = p.folder == 'folder-collection-sessions'; - $('#fileslistmenu-link, #layout > .content > .pagenav, #layout > .content .searchbar')is_sess ? 'hide' : 'show'(); + $('#fileslistmenu-link, #layout-content > .pagenav, #layout-content .searchbar')is_sess ? 'hide' : 'show'(); $('#sessionslistmenu-link')is_sess ? 'removeClass' : 'addClass'('hidden'); // set list header title for mobile - // $('#layout > .content > .header > .header-title').text($('#files-folder-list li.selected a.name:first').text()); + // $('#layout-content > .header > .header-title').text($('#files-folder-list li.selected a.name:first').text()); }); }
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_notes/composer.json -> roundcubemail-plugins-kolab-3.4.5.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.4.4", + "version": "3.4.5", "authors": { "name": "Thomas Bruederli",
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_notes/kolab_notes.php -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_notes/kolab_notes.php
Changed
@@ -96,13 +96,13 @@ // add 'Append note' item to message menu if ($this->api->output->type == 'html' && $_REQUEST'_rel' != 'note') { - $this->api->add_content(html::tag('li', null, + $this->api->add_content(html::tag('li', array('role' => 'menuitem'), $this->api->output->button(array( 'command' => 'append-kolab-note', 'label' => 'kolab_notes.appendnote', 'type' => 'link', 'classact' => 'icon appendnote active', - 'class' => 'icon appendnote', + 'class' => 'icon appendnote disabled', 'innerclass' => 'icon note', ))), 'messagemenu');
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_notes/skins/elastic/templates/notes.html -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_notes/skins/elastic/templates/notes.html
Changed
@@ -4,7 +4,7 @@ <h1 class="voice"><roundcube:label name="kolab_notes.navtitle" /></h1> <!-- notebooks list --> -<div class="sidebar listbox" role="navigation" aria-labelledby="arial-label-notebooks"> +<div id="layout-sidebar" class="listbox" role="navigation" aria-labelledby="arial-label-notebooks"> <div class="header"> <a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a> <span id="aria-label-notebooks" class="header-title"><roundcube:label name="kolab_notes.lists" /></span> @@ -12,7 +12,7 @@ title="kolab_notes.listactions" class="button icon sidebar-menu" data-popup="notebookactions-menu" innerClass="inner" label="actions" /> </div> - <roundcube:object name="libkolab.folder_search_form" id="notebooksearch" wrapper="searchbar toolbar" + <roundcube:object name="libkolab.folder_search_form" id="notebooksearch" wrapper="searchbar menu" ariatag="h2" label="foldersearchform" label-domain="kolab_notes" buttontitle="findnotebooks" /> <div id="notebooks-content" class="scroller"> <roundcube:object name="plugin.notebooks" id="notebooks" class="listing treelist iconized" /> @@ -20,18 +20,18 @@ </div> <!-- notes list --> -<div class="list listbox selected" aria-labelledby="aria-label-noteslist"> +<div id="layout-list" class="listbox selected" aria-labelledby="aria-label-noteslist"> <div class="header"> - <a class="button icon menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a> + <a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a> <a class="button icon back-sidebar-button folders" href="#sidebar"><span class="inner"><roundcube:label name="kolab_notes.notebooks" /></span></a> <span id="aria-label-noteslist" class="header-title"><roundcube:label name="kolab_notes.notes" /></span> - <div id="listcontrols" class="toolbar" role="toolbar"> + <div id="listcontrols" class="toolbar menu" role="toolbar"> <roundcube:button name="optionsmenu" id="listmenulink" type="link" class="button settings active" label="options" innerClass="inner" onclick="return kolab_notes_options_menu()" /> </div> <a class="button icon toolbar-menu-button" href="#list-menu"><span class="inner"><roundcube:label name="menu" /></span></a> </div> - <roundcube:object name="plugin.searchform" id="searchform" wrapper="searchbar toolbar" + <roundcube:object name="plugin.searchform" id="searchform" wrapper="searchbar menu" label="notesearchform" label-domain="kolab_notes" buttontitle="kolab_notes.findnotes" ariatag="h2" /> <div class="scroller"> <h2 id="aria-label-noteslist" class="voice"><roundcube:label name="kolab_notes.notes" /></h2> @@ -43,30 +43,26 @@ </div> <!-- note details frame --> -<div class="content" role="main"> +<div id="layout-content" role="main"> <h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2> <div class="header" role="toolbar" aria-labelledby="aria-label-toolbar"> <a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a> <span class="header-title"></span> <!-- toolbar --> - <div id="notestoolbar" class="toolbar"> - <roundcube:button command="createnote" type="link" - class="button create disabled" classAct="button create" + <div id="notestoolbar" class="toolbar menu"> + <roundcube:button command="createnote" type="link" class="create disabled" classAct="create" label="create" title="kolab_notes.createnote" innerclass="inner" data-fab="true" /> - <roundcube:button command="print" type="link" data-hidden="small" - class="button print disabled" classAct="button print" + <roundcube:button command="print" type="link" class="print disabled" classAct="print" data-hidden="small" label="print" title="print" innerClass="inner" /> - <roundcube:button command="delete" type="link" - class="button delete disabled" classAct="button delete" + <roundcube:button command="delete" type="link" class="delete disabled" classAct="delete" title="delete" label="delete" innerClass="inner" /> <span class="spacer"></span> - <roundcube:button command="sendnote" type="link" - class="button send disabled" classAct="button send" + <roundcube:button command="sendnote" type="link" class="send disabled" classAct="send" label="kolab_notes.send" title="kolab_notes.sendnote" innerClass="inner" /> <roundcube:container name="toolbar" id="notestoolbar" /> <roundcube:if condition="config:kolab_bonnie_api" /> <roundcube:button command="history" type="link" - class="button history note-history disabled" classAct="button history note-history" + class="history note-history disabled" classAct="history note-history" label="libkolab.objectchangelog" title="libkolab.showhistory" innerClass="inner" /> <roundcube:endif /> </div> @@ -117,7 +113,7 @@ <div id="notebookactions-menu" class="popupmenu"> <h3 id="aria-label-actionsmenu" class="voice"><roundcube:label name="kolab_notes.arialabelnotesoptionsmenu" /></h3> - <ul class="toolbarmenu listing" role="menu" aria-labelledby="aria-label-actionsmenu"> + <ul class="menu listing" role="menu" aria-labelledby="aria-label-actionsmenu"> <roundcube:button type="link-menuitem" command="list-create" label="kolab_notes.addnotebook" class="create disabled" classAct="create active" /> <roundcube:button type="link-menuitem" command="list-edit" label="kolab_notes.editlist" class="edit disabled" classAct="edit active" /> <roundcube:button type="link-menuitem" command="list-delete" label="kolab_notes.deletelist" class="delete disabled" classAct="delete active" />
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_tags/composer.json -> roundcubemail-plugins-kolab-3.4.5.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.4.2", + "version": "3.4.5", "authors": { "name": "Aleksander Machniak",
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_tags/kolab_tags.js -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_tags/kolab_tags.js
Changed
@@ -434,7 +434,7 @@ // ajax response handler function update_tags(response) { - var list = rcmail.message_list; + var list = main_list_widget(); // reset tag selector popup tag_selector_reset(); @@ -513,14 +513,14 @@ rcmail.enable_command('reset-tags', tagsfilter.length && list); // update Mark menu in case some messages are already selected - if (list && list.selection.length) { + if (list && list.selection && list.selection.length) { message_list_select(list); } // @TODO: sort tags by name/prio } -// internal method to remove tags from messages and optionally tags cloud +// internal method to remove tags from messages and tags cloud function remove_tags(tags, selection) { if (!tags || !tags.length) { @@ -537,13 +537,14 @@ // remove deleted tags $.each(tags, function() { var i, id = this, - filter = function() { return $(this).data('tag') == id; }, - elements = tagboxes.filter(filter); - - // ... from the messages list (or message page) - elements.remove(); + filter = function() { return $(this).data('tag') == id; }; + // When removing tags from selected messages only, we're using + // tag_remove_callback(), so here we can ignore that part if (!selection) { + // ... from the messages list (or message page) + tagboxes.filter(filter).remove(); + // ...from the tag cloud taglist.filter(filter).remove(); @@ -554,11 +555,11 @@ break; } } - } - // ... from the message frame - if (frame_tagboxes.length) { - frame_tagboxes.filter(function() { return win.jQuery(this).data('tag') == id; }).remove(); + // ... from the message frame + if (frame_tagboxes.length) { + frame_tagboxes.filter(function() { return win.jQuery(this).data('tag') == id; }).remove(); + } } // if tagged messages found and tag was selected - refresh the list @@ -692,7 +693,7 @@ // remove tags from message(s) without waiting to a response // in case of an error the list will be refreshed - tag_remove_callback(this.tag_find(props)); + $.each(tags, function() { tag_remove_callback(this); }); } // update messages list and message frame after removing tag assignments @@ -701,16 +702,19 @@ if (!tag) return; - var frame_window = rcmail.get_frame_window(rcmail.env.contentframe), - list = rcmail.message_list; + var uids = , + win = rcmail.get_frame_window(rcmail.env.contentframe), + frame_tagboxes = win && win.jQuery ? win.jQuery('span.tagbox') : , + list = main_list_widget(); if (list) { $.each(list.get_selection(), function (i, uid) { var row = list.rowsuid; if (row) { $('span.tagbox', row.obj).each(function() { - if (!tag || $(this).data('tag') == tag.uid) { + if ($(this).data('tag') == tag) { $(this).remove(); + uids.push(String(uid)); } }); } @@ -718,11 +722,17 @@ message_list_select(list); } + else { + $('span.tagbox').filter(function() { return $(this).data('tag') == tag; }).remove(); + } - // TODO: remove tag(s) from the preview frame + // ... from the message frame (make sure it the selected message frame, + // i.e. when using contextmenu it might be not the selected one) + if (frame_tagboxes.length && $.inArray(String(win.rcmail.env.uid), uids) >= 0) { + frame_tagboxes.filter(function() { return win.jQuery(this).data('tag') == tag; }).remove(); + } } - // executes messages search according to selected messages function apply_tags_filter() { @@ -899,7 +909,7 @@ if (!container) { var rows = , - ul = $('<ul class="toolbarmenu">'), + ul = $('<ul class="toolbarmenu menu">'), li = document.createElement('li'), link = document.createElement('a'), span = document.createElement('span');
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/kolab_tags/skins/elastic/templates/ui.html -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/kolab_tags/skins/elastic/templates/ui.html
Changed
@@ -6,7 +6,7 @@ </div> <div id="tagsmenu" class="popupmenu" aria-hidden="true"> - <ul class="toolbarmenu iconized"> + <ul class="menu iconized"> <li class="separator"><label><roundcube:label name="kolab_tags.tags" /></label></li> <roundcube:button type="link-menuitem" command="reset-tags" label="kolab_tags.unset" class="tags reset disabled" classAct="tags reset active" /> <roundcube:button type="link-menuitem" command="manage-tags" label="kolab_tags.manage" class="tags disabled" classAct="tags active" /> @@ -15,7 +15,7 @@ </div> <div id="tagmessagemenu" class="popupmenu" aria-hidden="true"> - <ul class="toolbarmenu iconized"> + <ul class="menu iconized"> <li class="separator"><label><roundcube:label name="kolab_tags.tags" /></label></li> <roundcube:button type="link-menuitem" command="tag-add" label="kolab_tags.tagadd" classAct="tag add active" class="tag add disabled" /> <roundcube:button type="link-menuitem" command="tag-remove" label="kolab_tags.tagremove" classAct="tag remove active" class="tag remove disabled" />
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/libcalendaring/composer.json -> roundcubemail-plugins-kolab-3.4.5.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.4.4", + "version": "3.4.5", "authors": { "name": "Thomas Bruederli",
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/libcalendaring/lib/libcalendaring_itip.php -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/libcalendaring/lib/libcalendaring_itip.php
Changed
@@ -707,14 +707,14 @@ // add button to open calendar/preview if (!empty($preview_url)) { - $msgref = $this->lib->ical_message->folder . '/' . $this->lib->ical_message->uid . '#' . $mime_id; - $rsvp_buttons .= html::tag('input', array( - 'type' => 'button', - // TODO: Temp. disable this button on small screen in Elastic (Bifrost#T105747) - 'class' => "button preview hidden-phone hidden-small", - 'onclick' => "rcube_libcalendaring.open_itip_preview('" . rcube::JQ($preview_url) . "', '" . rcube::JQ($msgref) . "')", - 'value' => $this->gettext('openpreview'), - )); + $msgref = $this->lib->ical_message->folder . '/' . $this->lib->ical_message->uid . '#' . $mime_id; + $rsvp_buttons .= html::tag('input', array( + 'type' => 'button', + // TODO: Temp. disable this button on small screen in Elastic (Bifrost#T105747) + 'class' => "button preview hidden-phone hidden-small", + 'onclick' => "rcube_libcalendaring.open_itip_preview('" . rcube::JQ($preview_url) . "', '" . rcube::JQ($msgref) . "')", + 'value' => $this->gettext('openpreview'), + )); } // 2. update the local copy with minor changes @@ -733,9 +733,9 @@ 'value' => $this->gettext('importtocalendar'), )); - // check my status + // check my status as an attendee foreach ($event'attendees' as $attendee) { - if ($attendee'email' && in_array(strtolower($attendee'email'), $emails)) { + if ($attendee'email' && $attendee'role' != 'ORGANIZER' && in_array(strtolower($attendee'email'), $emails)) { $metadata'attendee' = $attendee'email'; $metadata'rsvp' = $attendee'rsvp' || $attendee'role' != 'NON-PARTICIPANT'; $rsvp_status = !empty($attendee'status') ? strtoupper($attendee'status') : 'NEEDS-ACTION'; @@ -906,7 +906,7 @@ { $table = new html_table(array('cols' => 2, 'border' => 0, 'class' => 'calendar-eventdetails')); $table->add('ititle', $title); - $table->add('title', rcube::Q($event'title')); + $table->add('title', rcube::Q(trim($event'title'))); if ($event'start' && $event'end') { $table->add('label', $this->gettext('date')); $table->add('date', rcube::Q($this->lib->event_date_text($event))); @@ -923,21 +923,21 @@ $table->add('label', $this->gettext('recurring')); $table->add('recurrence', $this->lib->recurrence_text($event'recurrence')); } - if ($event'location' && trim($event'location')) { + if ($location = trim($event'location')) { $table->add('label', $this->gettext('location')); - $table->add('location', rcube::Q($event'location')); + $table->add('location', rcube::Q($location)); } - if ($event'sensitivity' && !preg_match('/^(x-|public$)/i', $event'sensitivity')) { + if (($sensitivity = trim($event'sensitivity')) && !preg_match('/^(x-|public$)/i', $sensitivity)) { $table->add('label', $this->gettext('sensitivity')); - $table->add('sensitivity', ucfirst($this->gettext($event'sensitivity')) . '!'); + $table->add('sensitivity', ucfirst($this->gettext($sensitivity)) . '!'); } if ($event'status' == 'COMPLETED' || $event'status' == 'CANCELLED') { $table->add('label', $this->gettext('status')); $table->add('status', $this->gettext('status-' . strtolower($event'status'))); } - if ($event'comment' && trim($event'comment')) { + if ($comment = trim($event'comment')) { $table->add('label', $this->gettext('comment')); - $table->add('location', rcube::Q($event'comment')); + $table->add('location', rcube::Q($comment)); } return $table->show();
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/libcalendaring/libcalendaring.js -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/libcalendaring/libcalendaring.js
Changed
@@ -1318,12 +1318,11 @@ */ rcube_libcalendaring.itip_rsvp_recurring = function(btn, callback, event) { - var list, lc, menu = $('#itip-rsvp-menu'), action = btn.attr('rel'); + var list, menu = $('#itip-rsvp-menu'), action = btn.attr('rel'); if (!menu.length) { - lc = $('body > #layout').length === 1 ? 'toolbarmenu listing' : 'toolbarmenu'; menu = $('<div>').attr({'class': 'popupmenu', id: 'itip-rsvp-menu', 'aria-hidden': 'true'}).appendTo(document.body); - list = $('<ul>').attr({'class': lc, role: 'menu'}).appendTo(menu); + list = $('<ul>').attr({'class': 'toolbarmenu menu', role: 'menu'}).appendTo(menu); $.each('all','current'/*,'future'*/, function(i, mode) { var link = $('<a>').attr({'class': 'active', rel: mode})
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/libcalendaring/libcalendaring.php -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/libcalendaring/libcalendaring.php
Changed
@@ -386,6 +386,7 @@ * Get a list of email addresses of the given user (from login and identities) * * @param string User Email (default to current user) + * * @return array Email addresses related to the user */ public function get_user_emails($user = null) @@ -418,10 +419,13 @@ /** * Set the given participant status to the attendee matching the current user's identities + * Unsets 'rsvp' flag too. + * + * @param array &$event Event data + * @param string $status The PARTSTAT value to set + * @param bool $recursive Recurive call * - * @param array Hash array with event struct - * @param string The PARTSTAT value to set - * @return mixed Email address of the updated attendee or False if none matching found + * @return mixed Email address of the updated attendee or False if none matching found */ public function set_partstat(&$event, $status, $recursive = true) { @@ -430,6 +434,7 @@ foreach ((array)$event'attendees' as $i => $attendee) { if ($attendee'email' && in_array(strtolower($attendee'email'), $emails)) { $event'attendees'$i'status' = strtoupper($status); + unset($event'attendees'$i'rsvp'); $success = $attendee'email'; } } @@ -761,7 +766,7 @@ $this->gettext(array('name' => $label, 'vars' => array('min' => $n % 60, 'hrs' => intval($n / 60)))))); } - return html::tag('ul', $attrib + array('class' => 'toolbarmenu'), join("\n", $items), html::$common_attrib); + return html::tag('ul', $attrib + array('class' => 'toolbarmenu menu'), join("\n", $items), html::$common_attrib); }
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/libkolab/composer.json -> roundcubemail-plugins-kolab-3.4.5.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.4.4", + "version": "3.4.5", "authors": { "name": "Thomas Bruederli",
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/libkolab/lib/kolab_storage.php -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/libkolab/lib/kolab_storage.php
Changed
@@ -463,14 +463,17 @@ * * Does additional checks for permissions and folder name restrictions * - * @param array Hash array with folder properties and metadata + * @param array &$prop Hash array with folder properties and metadata * - name: Folder name * - oldname: Old folder name when changed * - parent: Parent folder to create the new one in * - type: Folder type to create * - subscribed: Subscribed flag (IMAP subscription) * - active: Activation flag (client-side subscription) - * @return mixed New folder name or False on failure + * + * @return string|false New folder name or False on failure + * + * @see self::set_folder_props() for list of other properties */ public static function folder_update(&$prop) { @@ -1473,7 +1476,7 @@ * Sets folder metadata properties * * @param string $folder Folder name - * @param array $prop Folder properties + * @param array &$prop Folder properties (color, displayname) */ public static function set_folder_props($folder, &$prop) {
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/libkolab/libkolab.php -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/libkolab/libkolab.php
Changed
@@ -69,13 +69,13 @@ $this->include_script('libkolab.js'); // add 'Show history' item to message menu - $this->api->add_content(html::tag('li', null, + $this->api->add_content(html::tag('li', array('role' => 'menuitem'), $this->api->output->button(array( 'command' => 'kolab-mail-history', 'label' => 'libkolab.showhistory', 'type' => 'link', 'classact' => 'icon history active', - 'class' => 'icon history', + 'class' => 'icon history disabled', 'innerclass' => 'icon history', ))), 'messagemenu');
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/libkolab/skins/elastic/include/calendar.less -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/libkolab/skins/elastic/include/calendar.less
Changed
@@ -21,9 +21,9 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -.toolbarmenu.listing li { +.menu { a.calendarlink:before { - .font-icon-regular(@fa-var-calendar); + content: @fa-var-calendar-alt; } a.send:before { @@ -36,12 +36,14 @@ content: @fa-var-cube; } -a.button.today:before { - .font-icon-regular(@fa-var-calendar); -} +a.button { + &.today:before { + .font-icon-regular(@fa-var-calendar); + } -a.button.date:before { - .font-icon-regular(@fa-var-calendar-alt); + &.date:before { + .font-icon-regular(@fa-var-calendar-alt); + } } .listing { @@ -652,7 +654,7 @@ } @media screen and (min-width: (@screen-width-small + 1px)) { - & > #layout > div.sidebar { + #layout-sidebar { flex: 2 !important; max-width: 400px; } @@ -1247,18 +1249,10 @@ } } -.task-calendar .content .searchbar { - border-color: @color-layout-border; -} - .searchbar a.button.date { @media screen and (min-width: (@screen-width-small + 1px)) { display: none; } - - &:before { - line-height: 1.25; - } } @media screen and (max-width: @screen-width-small) { @@ -1272,7 +1266,7 @@ } } - .sidebar .calendar-datepicker { + #layout-sidebar .calendar-datepicker { display: none; }
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/libkolab/skins/elastic/include/kolab_files.less -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/libkolab/skins/elastic/include/kolab_files.less
Changed
@@ -29,24 +29,22 @@ content: @fa-var-folder; } -.toolbarmenu.listing li a.mount.storage:before { - content: @fa-var-database; -} - -.toolbar a.button.open:before { - content: @fa-var-eye; -} +.menu { + a.mount.storage:before { + content: @fa-var-database; + } -.toolbar a.button.rename:before { - content: @fa-var-pen-square; -} + a.open:before { + content: @fa-var-eye; + } -.toolbar a.button.cancel:before { - content: @fa-var-times; -} + a.cancel:before { + content: @fa-var-times; + } -.listing li a.share:before { - content: @fa-var-share-alt; + a.share:before { + content: @fa-var-share-alt; + } } .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset a.btn-link.options.add-folder { @@ -375,10 +373,11 @@ .document-editor-header { .toolbar { text-align: left !important; - } + flex: 1; - .header-title { - margin: 0 !important; + a { + text-align: center; + } } a.button.icon.members:before {
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/libkolab/skins/elastic/include/kolab_notes.less -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/libkolab/skins/elastic/include/kolab_notes.less
Changed
@@ -21,9 +21,9 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -.toolbarmenu.listing li { +.menu { a.appendnote:before { - .font-icon-regular(@fa-var-sticky-note); + content: @fa-var-sticky-note; } }
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/libkolab/skins/elastic/include/kolab_tags.less -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/libkolab/skins/elastic/include/kolab_tags.less
Changed
@@ -21,7 +21,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -.toolbarmenu.listing li { +.menu { a.tags:before { content: @fa-var-tags; } @@ -36,6 +36,7 @@ #taglist { li { padding: 0 .5rem; + &:before { &:extend(.font-icon-class); content: @fa-var-tag;
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/libkolab/skins/elastic/include/tasklist.less -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/libkolab/skins/elastic/include/tasklist.less
Changed
@@ -21,14 +21,12 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#taskmenu a.tasklist:before { - content: @fa-var-calendar-check; -} -.toolbarmenu.listing li { +.menu { + a.tasklist:before, a.tasklistlink:before, a.taskaddlink:before { - .font-icon-regular(@fa-var-calendar-check); + content: @fa-var-calendar-check; } } @@ -313,6 +311,11 @@ list-style-type: none; margin: 0; padding: 0; + + li { + display: flex; + align-items: center; + } } input {
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/libkolab/skins/elastic/libkolab.less -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/libkolab/skins/elastic/libkolab.less
Changed
@@ -279,8 +279,8 @@ } } -.toolbarmenu.listing li { - &.search { +.menu { + li.search { padding: .25rem .5rem; .input-group { @@ -300,12 +300,13 @@ } } -a.history { - &:before { - &:extend(.font-icon-class); - content: @fa-var-history; - display: inline; - float: none; +button.btn { + &.save.notify:before { + content: @fa-var-envelope; + } + + &.print:before { + content: @fa-var-print; } } @@ -340,7 +341,12 @@ } & > * { - display: initial; + display: block; + } + + html.layout-small &, + html.layout-phone & { + overflow-y: auto !important; } } } @@ -375,14 +381,6 @@ } } -button.btn.save.notify:before { - content: @fa-var-envelope; -} - -button.btn.print:before { - content: @fa-var-print; -} - .formcontent.text-only .faded * { color: @color-black-shade-text; } @@ -529,23 +527,20 @@ // Use icons-only on taskmenu with small screen height @media screen and (max-height: 640px) and (min-width: (@screen-width-small + 1px)) { - body > #layout > .menu { - width: 2.5rem; + #layout-menu .popover-header img, + #layout-menu { + width: @layout-menu-width-sm; } #taskmenu { a { - height: auto; + height: @layout-menu-width-sm; width: 100%; - - &:before { - height: 2.1rem; - width: 100%; - } + font-size: 1.2rem !important; } .special-buttons { - width: 2.5rem; + width: @layout-menu-width-sm; } span.inner {
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/libkolab/skins/elastic/templates/attachment.html -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/libkolab/skins/elastic/templates/attachment.html
Changed
@@ -2,7 +2,7 @@ <h1 class="voice"><roundcube:var name="env:filename" /></h1> -<div class="sidebar listbox"> +<div id="layout-sidebar" class="listbox"> <div class="header"> <a class="button icon back-content-button" href="#content" data-hidden="big"><span class="inner"><roundcube:label name="back" /></span></a> <span class="header-title" id="aria-label-contentinfo"><roundcube:label name="properties" /></span> @@ -13,14 +13,14 @@ </div> </div> -<div class="content selected"> +<div id="layout-content" class="selected"> <h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2> <div class="header" role="toolbar" aria-labelledby="aria-label-toolbar"> <a class="button icon properties" id="properties-button" href="#properties" onclick="UI.show_sidebar()" data-hidden="big"> <span class="inner"><roundcube:label name="properties"></span> </a> <span class="header-title constant"><roundcube:var name="env:filename" /></span> - <div id="messagetoolbar" class="toolbar"> + <div id="messagetoolbar" class="toolbar menu"> <roundcube:button command="download-attachment" type="link" label="download" title="download" class="button download disabled" classAct="button download" innerclass="inner" /> <roundcube:button command="print-attachment" type="link" label="print" title="print" @@ -46,7 +46,7 @@ <roundcube:if condition="stripos(env:mimetype, 'image/') === 0" /> <div id="image-tools" class="image-tools" data-hidden="big"> <h3 id="aria-label-imagetools" class="voice"><roundcube:label name="arialabelimagetools" /></h3> - <div class="toolbar" role="menu" aria-labelledby="aria-label-imagetools"> + <div class="toolbar menu" role="menu" aria-labelledby="aria-label-imagetools"> <roundcube:button command="image-scale" type="link" prop="+" class="button zoomin disabled" classAct="button zoomin" label="zoomin" title="increaseimage" innerclass="inner" />
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/tasklist/composer.json -> roundcubemail-plugins-kolab-3.4.5.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.4.4", + "version": "3.4.5", "authors": { "name": "Thomas Bruederli",
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/tasklist/skins/elastic/templates/mainview.html -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/tasklist/skins/elastic/templates/mainview.html
Changed
@@ -4,7 +4,7 @@ <h1 class="voice"><roundcube:label name="tasklist.navtitle" /></h1> <!-- task folders list --> -<div class="sidebar listbox" role="navigation" aria-labelledby="arial-label-notebooks"> +<div id="layout-sidebar" class="listbox" role="navigation" aria-labelledby="arial-label-notebooks"> <div class="header"> <a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a> <span id="aria-label-tasklists" class="header-title"><roundcube:label name="tasklist.lists" /></span> @@ -12,7 +12,7 @@ title="tasklist.listactions" class="button icon sidebar-menu" data-popup="tasklistactions-menu" innerClass="inner" label="actions" /> </div> - <roundcube:object name="libkolab.folder_search_form" id="tasklistsearch" wrapper="searchbar toolbar" + <roundcube:object name="libkolab.folder_search_form" id="tasklistsearch" wrapper="searchbar menu" ariatag="h2" label="foldersearchform" label-domain="tasklist" buttontitle="findlists" /> <div id="tasklists-content" class="scroller"> <roundcube:object name="plugin.tasklists" id="tasklists" class="treelist listing iconized" /> @@ -20,21 +20,21 @@ </div> <!-- tasks list --> -<div class="list listbox selected" aria-labelledby="aria-label-taskslist"> +<div id="layout-list" class="listbox selected" aria-labelledby="aria-label-taskslist"> <div class="header"> - <a class="button icon menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a> + <a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a> <a class="button icon back-sidebar-button folders" href="#sidebar"><span class="inner"><roundcube:label name="tasklist.lists" /></span></a> <span id="aria-label-taskslist" class="header-title"><roundcube:label name="tasklist.navtitle" /></span> - <div id="listcontrols" class="toolbar" role="toolbar"> + <div id="listcontrols" class="toolbar menu" role="toolbar"> <a href="#threads" class="button threads active" data-popup="threadselect-menu" title="<roundcube:label name="threads" />"><span class="inner"><roundcube:label name="threads" /></span></a> <roundcube:button name="optionsmenu" id="listmenulink" type="link" class="button settings active" label="options" innerClass="inner" onclick="tasklist_options_menu()" /> </div> <a class="button icon toolbar-menu-button" href="#list-menu"><span class="inner"><roundcube:label name="menu" /></span></a> </div> - <roundcube:object name="plugin.searchform" id="searchform" wrapper="searchbar toolbar" + <roundcube:object name="plugin.searchform" id="searchform" wrapper="searchbar menu" label="tasksearchform" label-domain="tasklist" buttontitle="tasklist.findtasks" ariatag="h2" /> - <div class="pagenav pagenav-list toolbar" onclick="UI.switch_nav_list(this)"> + <div class="pagenav pagenav-list menu" onclick="UI.switch_nav_list(this)"> <a class="button icon expand"><span class="inner"></span></a> <span id="taskselector-name" class="pagenav-text"><roundcube:label name="tasklist.all" /></span> </div> @@ -67,33 +67,33 @@ </div> <!-- task details frame --> -<div class="content" role="main"> +<div id="layout-content" role="main"> <h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2> <div class="header" role="toolbar" aria-labelledby="aria-label-toolbar"> <a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a> <span class="header-title"></span> <!-- toolbar --> - <div id="taskstoolbar" class="toolbar"> + <div id="taskstoolbar" class="toolbar menu"> <roundcube:button command="newtask" type="link" - class="button create disabled" classAct="button create" + class="create disabled" classAct="create" label="create" title="tasklist.newtask" innerClass="inner" data-fab="true" /> <roundcube:button command="print" type="link" data-hidden="small" - class="button print disabled" classAct="button print" + class="print disabled" classAct="print" label="print" title="tasklist.printtitle" innerClass="inner" /> <roundcube:button command="delete-task" type="link" label="delete" title="tasklist.deletetask" - class="button delete disabled" classAct="button delete" innerclass="inner" /> + class="delete disabled" classAct="delete" innerclass="inner" /> <span class="spacer"></span> <roundcube:if condition="config:kolab_bonnie_api" /> <roundcube:button command="task-history" type="link" - class="button history task-history disabled" classAct="button history task-history" + class="history task-history disabled" classAct="history task-history" label="tasklist.taskhistory" title="libkolab.showhistory" innerClass="inner" /> <roundcube:endif /> <roundcube:button command="import" type="link" - class="button import disabled" classAct="button import" + class="import disabled" classAct="import" label="import" title="tasklist.importtasks" innerClass="inner" /> <roundcube:button command="export" type="link" - class="button export disabled" classAct="button export" + class="export disabled" classAct="export" label="tasklist.export" title="tasklist.exporttitle" innerClass="inner" /> <roundcube:container name="toolbar" id="taskstoolbar" /> </div> @@ -253,7 +253,7 @@ <div id="tasklistactions-menu" class="popupmenu"> <h3 id="aria-label-tasklistoptions" class="voice"><roundcube:label name="tasklist.listactions" /></h3> - <ul class="toolbarmenu listing" role="menu" aria-labelledby="aria-label-tasklistoptions"> + <ul class="menu listing" role="menu" aria-labelledby="aria-label-tasklistoptions"> <roundcube:button type="link-menuitem" command="list-create" label="tasklist.createlist" class="create disabled" classAct="create active" /> <roundcube:button type="link-menuitem" command="list-edit" label="tasklist.editlist" class="edit disabled" classAct="edit active" /> <roundcube:button type="link-menuitem" command="list-delete" label="tasklist.deletelist" class="delete disabled" classAct="delete active" /> @@ -298,9 +298,9 @@ <div id="threadselect-menu" class="popupmenu"> <h3 id="aria-label-threadselectmenu" class="voice"><roundcube:label name="tasklist.viewactions" /></h3> - <ul class="toolbarmenu listing" role="menu" aria-labelledby="aria-label-threadselectmenu"> - <roundcube:button command="expand-all" type="link-menuitem" label="expand-all" class="expand all" classAct="expand all active" /> - <roundcube:button command="collapse-all" type="link-menuitem" label="collapse-all" class="expand none" classAct="expand none active" /> + <ul class="menu listing" role="menu" aria-labelledby="aria-label-threadselectmenu"> + <roundcube:button command="expand-all" type="link-menuitem" label="expand-all" class="expand all disabled" classAct="expand all active" /> + <roundcube:button command="collapse-all" type="link-menuitem" label="collapse-all" class="expand none disabled" classAct="expand none active" /> </ul> </div>
View file
roundcubemail-plugins-kolab-3.4.4.tar.gz/plugins/tasklist/tasklist.php -> roundcubemail-plugins-kolab-3.4.5.tar.gz/plugins/tasklist/tasklist.php
Changed
@@ -141,13 +141,13 @@ // add 'Create event' item to message menu if ($this->api->output->type == 'html' && $_GET'_rel' != 'task') { - $this->api->add_content(html::tag('li', null, + $this->api->add_content(html::tag('li', array('role' => 'menuitem'), $this->api->output->button(array( 'command' => 'tasklist-create-from-mail', 'label' => 'tasklist.createfrommail', 'type' => 'link', 'classact' => 'icon taskaddlink active', - 'class' => 'icon taskaddlink', + 'class' => 'icon taskaddlink disabled', 'innerclass' => 'icon taskadd', ))), 'messagemenu'); @@ -1869,7 +1869,7 @@ foreach ($this->message_tasks as $task) { $checkbox = new html_checkbox(array( 'name' => 'completed', - 'class' => 'complete', + 'class' => 'complete pretty-checkbox', 'title' => $this->gettext('complete'), 'data-list' => $task'list', )); @@ -1910,7 +1910,7 @@ 'type' => 'link', 'wrapper' => 'li', 'command' => 'attachment-save-task', - 'class' => 'icon tasklistlink', + 'class' => 'icon tasklistlink disabled', 'classact' => 'icon tasklistlink active', 'innerclass' => 'icon taskadd', 'label' => 'tasklist.savetotasklist',
View file
roundcubemail-plugins-kolab.dsc
Changed
@@ -2,7 +2,7 @@ Source: roundcubemail-plugins-kolab Binary: roundcubemail-plugins-kolab Architecture: all -Version: 1:3.4.4-0~kolab2 +Version: 1:3.4.5-0~kolab1 Maintainer: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Uploaders: Paul Klos <kolab@klos2day.nl> Standards-Version: 3.9.3 @@ -37,5 +37,5 @@ roundcubemail-plugin-tinymce-config deb web extra roundcubemail-plugin-wap-client deb web extra Files: - 00000000000000000000000000000000 0 roundcubemail-plugins-kolab-3.4.4.tar.gz + 00000000000000000000000000000000 0 roundcubemail-plugins-kolab-3.4.5.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
.