Compare commits

...
830 Commits
Author SHA1 Message Date
Francis Lachapelle 5de5e9e068 Update ChangeLog 2018-10-17 11:18:38 -04:00
Francis Lachapelle 0e731452ee Preparation for release 4.0.3 2018-10-17 11:18:04 -04:00
Francis Lachapelle 181aedd611 (css) Update default theme 2018-10-17 11:15:09 -04:00
Francis Lachapelle abd7d2614f (js/css) Update generated files 2018-10-17 11:07:17 -04:00
Francis Lachapelle 8525e6fd2b Update NEWS file 2018-10-17 11:04:06 -04:00
Francis Lachapelle 1ab1735481 (js) Update CKEditor to version 4.10.1 2018-10-17 10:58:39 -04:00
Francis Lachapelle 0643071d5b Fix ternary ops in UIxMailPartSignedViewer.m 2018-10-17 10:19:52 -04:00
Extra Fu 7cae529ee4 Merge pull request #243 from djlucas/master
Don't use SSL_load_error_strings() and friends for OpenSSL-1.1.0.
2018-10-16 08:26:19 -04:00
DJ Lucas c8f7df402c Don't use SSL_load_error_strings() and friends for OpenSSL-1.1.0. 2018-10-13 23:55:34 -05:00
InverseBot 659df2d10e (js/css) Update generated files 2018-10-12 00:33:48 -04:00
Francis Lachapelle af68a647b8 Additional short date formats 2018-10-10 11:21:39 -04:00
Francis Lachapelle 6613c44765 (i18n) Update Russian translation 2018-10-09 15:21:28 -04:00
Ludovic Marcotte 995ccb2b73 (fix) avoid saving non-parsable events/tasks 2018-10-09 14:47:22 -04:00
Francis Lachapelle 8120a48b95 (css) Fix styling of cancelled events 2018-10-09 14:36:56 -04:00
Francis Lachapelle fbdd0b82bb (js) Hide compose btn when reading msg on mobile 2018-10-09 14:12:49 -04:00
Francis Lachapelle e4f6be243e (js) Export calendar subscriptions
Fixes #4560
2018-10-09 14:00:19 -04:00
Francis Lachapelle 93bb95d256 Fix scrolling of Admin module in Firefox
Fixes #4561
2018-10-05 11:55:27 -04:00
InverseBot be7f07a7ba (js/css) Update generated files 2018-10-05 00:32:17 -04:00
InverseBot 03b45899c1 (js/css) Update generated files 2018-09-25 00:30:14 -04:00
Francis Lachapelle 74df75e5d5 (js) Prefix title with unseen messages count
Fixes #4553
2018-09-24 11:28:52 -04:00
Francis Lachapelle 78c1244975 Fix message editor in Address Book and Calendar 2018-09-24 11:25:55 -04:00
Ludovic Marcotte 12cbebec07 (fix) Removed trailing ; 2018-09-21 14:03:44 -04:00
Ludovic Marcotte f49ad93b3b (fix) removed trailing ; 2018-09-21 14:03:03 -04:00
Ludovic Marcotte fc3224b802 (fix) sql script fix (strip traling ;) 2018-09-21 13:06:39 -04:00
Ludovic Marcotte 3d9fe30373 (fix) many OCS (non-standard) fixes 2018-09-21 13:06:15 -04:00
Francis Lachapelle ba9960b97a Fix calendar categories for Slovak translation
Fixes #4550
2018-09-20 13:29:24 -04:00
Francis Lachapelle 7eac7db618 Fix calendar categories for Latvian translation
Fixes #4548
2018-09-20 09:29:05 -04:00
Francis Lachapelle b90d312f43 (web) Fix freebusy information with all-day events 2018-09-18 11:34:40 -04:00
Francis Lachapelle d05e1fed5d Fix SQL inserts in single-store mode 2018-09-14 13:28:45 -04:00
Francis Lachapelle 398ef4dcde Fix time conflict validation
Fixes #4539
2018-09-13 15:56:31 -04:00
Francis Lachapelle a7c88597c6 Fix email reminders support for tasks 2018-09-13 14:56:44 -04:00
Francis Lachapelle 563a2cd9df Fix behaviour of return receipt actions 2018-09-13 10:05:17 -04:00
Ludovic Marcotte 194b7f208a (fix) also set the folder ID for content row 2018-09-13 07:41:21 -04:00
InverseBot 3906e19176 (js/css) Update generated files 2018-09-13 00:29:12 -04:00
Francis Lachapelle ec4d93a845 Fix popup window detection in message viewer
Fixes #4518
2018-09-12 21:44:33 -04:00
Ludovic Marcotte ff7e8cb2a3 (fix) typo 2018-09-12 07:41:41 -04:00
InverseBot ecb7679621 (js/css) Update generated files 2018-09-12 00:33:43 -04:00
Francis Lachapelle 38c733bf8b (js) Fix syncing of calendar categories colors 2018-09-11 15:17:31 -04:00
Ludovic Marcotte 8f4a24fb67 (fix) move the folder id setting to avoid GDL error on Oracle 2018-09-11 12:07:25 -04:00
InverseBot 9310d5b02d (js/css) Update generated files 2018-09-08 00:32:23 -04:00
Francis Lachapelle 9ddb65a07a New button to reset Calendar categories
Also added default colors to categories.
2018-09-07 21:38:31 -04:00
Francis Lachapelle 2be5edde94 Fix display of multi-days events
When an event was starting on a disabled weekday, the entire event was
hidden.
2018-09-07 15:26:36 -04:00
Francis Lachapelle 9838c369b2 Update comment in SOGoAppointmentObject.m 2018-09-07 15:26:36 -04:00
InverseBot e3f928b0c3 (js/css) Update generated files 2018-09-07 00:32:30 -04:00
Francis Lachapelle 10485f8943 Fix display of calendar notification email 2018-09-06 08:24:48 -04:00
InverseBot 6d9de5859e (js/css) Update generated files 2018-09-01 00:29:34 -04:00
Francis Lachapelle 7aa3e1f160 (js) New action to mark task as completed
Fixes #4531
2018-08-31 16:45:03 -04:00
Francis Lachapelle 3881bc408d (js) Fix condition of Copy action on cards 2018-08-31 15:59:34 -04:00
Francis Lachapelle 3b9835095f (js) Check addressbook ACL prior to delete cards 2018-08-31 15:56:26 -04:00
Francis Lachapelle 19c02914ba (js) Convert AddressBooksController to new format 2018-08-31 13:29:32 -04:00
Francis Lachapelle 699fe537e1 (js) Fix error when reseting Calendar data 2018-08-31 13:18:32 -04:00
Francis Lachapelle 35cd2591d6 (js) Fix navbar collapse trigger in Preferences 2018-08-31 13:14:56 -04:00
Francis Lachapelle 679a12be19 (js) Catch error in CalendarsController 2018-08-31 13:14:31 -04:00
Francis Lachapelle 3394018604 (js) Expose invalid data in AddressBook.$id 2018-08-31 13:13:35 -04:00
Francis Lachapelle 2d63bd0bb4 (js) Deep copy by default in Calendar.$omit 2018-08-31 11:39:14 -04:00
Francis Lachapelle 155114c8fb (js) Restore calendar name on error 2018-08-31 09:39:42 -04:00
Francis Lachapelle 1e784e4590 (js) Fix id assignation of new Calendar 2018-08-31 09:36:21 -04:00
Francis Lachapelle eeec8328c0 Handle exception when saving calendar properties 2018-08-31 09:31:18 -04:00
InverseBot 87df69163f (js/css) Update generated files 2018-08-31 00:29:21 -04:00
Francis Lachapelle 3bdd90e2be Don't allow duplicate GCS folder names 2018-08-30 22:09:17 -04:00
Francis Lachapelle 18df3bafb5 Fix JSON error responses 2018-08-30 21:51:39 -04:00
Francis Lachapelle bad8efca47 Include mail account name in form validation
Fixes #4532
2018-08-30 14:57:24 -04:00
InverseBot 2fa3b4d5b0 (js/css) Update generated files 2018-08-30 00:29:17 -04:00
Francis Lachapelle b658faa8f2 Fix support for SOGoMaximumMessageSizeLimit 2018-08-29 11:28:08 -04:00
Francis Lachapelle bd8dec0e15 (js) Sanity checks when expecting arrays in Prefs 2018-08-29 10:54:17 -04:00
InverseBot bac1a59555 (js/css) Update generated files 2018-08-29 00:36:25 -04:00
Francis Lachapelle 0e2c93864b (js) Prohibit subscribing a user with no rights 2018-08-28 12:34:27 -04:00
Francis Lachapelle dfcc14356a Improve comments in Apache/SOGo.conf 2018-08-28 12:30:37 -04:00
Francis Lachapelle 1551b3deab Merge pull request #233 from gordonmessmer/apache-conf
Set the HTTP_HOST environment variable to enable preservation of the …
2018-08-27 22:05:39 -04:00
Ludovic Marcotte 4542163241 (fix) retry connection if abruptly closed 2018-08-27 08:41:24 -04:00
Francis Lachapelle 1144965660 Update ChangeLog 2018-08-24 09:01:47 -04:00
Francis Lachapelle b9b753579d Preparation for release 4.0.2 2018-08-24 09:00:38 -04:00
Ludovic Marcotte ef172b36bb (fix) added debugging to table creation code 2018-08-24 08:49:15 -04:00
InverseBot 7e0f0c2c95 (js/css) Update generated files 2018-08-24 00:30:03 -04:00
Francis Lachapelle 442ff4648c (i18n) Update translations 2018-08-23 15:13:01 -04:00
Francis Lachapelle 666c54851b (js) Update ui-router to version 1.0.20 2018-08-23 14:49:32 -04:00
Francis Lachapelle 326fa87176 (js) Fix navController access from md dialogs 2018-08-23 14:47:18 -04:00
Francis Lachapelle db567d90cc (i18n) Update translations 2018-08-23 12:58:13 -04:00
Francis Lachapelle c3271dd2a5 (css) Respect theme in time picker and freebusy
Fixes #4500
2018-08-23 12:02:20 -04:00
InverseBot df78658621 (js/css) Update generated files 2018-08-23 00:29:52 -04:00
Francis Lachapelle 838e1ac213 (js) Fix usage of MessageEditorController 2018-08-22 14:54:17 -04:00
Francis Lachapelle 3e5a486a1b (js) Improve Component service & controller
Fixes #4527
2018-08-22 14:52:44 -04:00
Francis Lachapelle 9f654d223b Fix saving task with reminder related to due date 2018-08-22 14:08:54 -04:00
InverseBot 90187876bf (js/css) Update generated files 2018-08-22 01:20:03 -04:00
Francis Lachapelle 71fa451856 Enforece SOGoSearchMinimumWordLength server-side
Fixes #4525
2018-08-21 16:54:26 -04:00
Francis Lachapelle 828d773b49 Add security flags to cookies (HttpOnly, secure)
Fixes #4525
2018-08-21 14:02:01 -04:00
Ludovic Marcotte 69c03e7479 Added missing files for OCI support 2018-08-21 12:37:05 -04:00
Francis Lachapelle e81cf29e4c (js) Restore caret position in message editor
Cont'd.

Fixes #4517
2018-08-21 10:43:01 -04:00
Francis Lachapelle bfd2481a9c (js) Ignore exception when closing filter editor 2018-08-21 10:20:55 -04:00
Francis Lachapelle 3fb60ae002 (i18n) Localized mailboxes names in filter editor 2018-08-21 10:11:45 -04:00
InverseBot f32e27f4f2 (js/css) Update generated files 2018-08-21 00:30:03 -04:00
Francis Lachapelle 996e05f701 (i18n) Remove duplicate "shortDateFmt" (German) 2018-08-20 14:19:23 -04:00
Francis Lachapelle 429d1fb2a8 (Preferences) Always show a date before the 10th
So that %d and %e return two different strings.
2018-08-20 14:02:06 -04:00
Francis Lachapelle 949edaa94d (js) Fix trigger when ordering mail filters
Cont'd.
2018-08-20 10:41:21 -04:00
Ludovic Marcotte fc8f57f55d Updated NEWS file 2018-08-20 09:28:00 -04:00
InverseBot d52a981440 (js/css) Update generated files 2018-08-18 00:30:02 -04:00
Francis Lachapelle f0b4e1b719 (js) Restore caret position in message editor
Fixes #4517
2018-08-17 16:31:50 -04:00
Francis Lachapelle e5d3c5fa33 Lazier matching of recipient address
Fixes #4495
2018-08-15 10:29:45 -04:00
Francis Lachapelle 6a45bb2917 (js) Enable save btn when editing a list's members 2018-08-15 09:31:02 -04:00
Ludovic Marcotte 0dc0ae4164 (doc) documented SOGoDAVCalendarStartTimeLimit 2018-08-14 10:17:14 -04:00
Francis Lachapelle 38fcc242e2 (i18n) Add missing string 2018-08-13 14:08:22 -04:00
InverseBot 038f93dc0e (js/css) Update generated files 2018-08-09 00:29:56 -04:00
InverseBot 9f2bcf3ec4 (js/css) Update generated files 2018-08-03 00:29:58 -04:00
Francis Lachapelle fccbdb3076 (js) Dynamically load localizable strings 2018-08-02 17:59:52 -04:00
Francis Lachapelle 30a81528a2 (js) Prohibit duplicate calendar categories 2018-08-02 09:29:33 -04:00
Ludovic Marcotte 5a48fca43d (fix) avoid displaying empty signed emails when using GNU TLS (fixes #4433) 2018-08-01 10:49:45 -04:00
InverseBot b98ec5c630 (js/css) Update generated files 2018-08-01 00:29:44 -04:00
Francis Lachapelle cac93c2e8a (js) Fix trigger when ordering mail filters 2018-07-31 11:20:47 -04:00
Francis Lachapelle 7f135e5323 (js) Improve popup window detection in mailer
Fixes #4518
2018-07-31 09:11:45 -04:00
Francis Lachapelle 0feddfc7af (web) Fix mailbox move action 2018-07-30 12:26:24 -04:00
Francis Lachapelle 6020f6ae83 (i18n) Add Romanian (ro) translation 2018-07-30 12:05:14 -04:00
InverseBot 540edc0c25 (js/css) Update generated files 2018-07-29 00:29:49 -04:00
InverseBot 9fc5c7d52a (js/css) Update generated files 2018-07-28 00:29:47 -04:00
Francis Lachapelle 894769ef6f (web) New menu option to move mailboxes
Fixes #644
Fixes #3511
Fixes #4479
2018-07-27 15:21:35 -04:00
Francis Lachapelle 7e75c8be45 Update time zones to version 2018e 2018-07-25 14:34:07 -04:00
Ludovic Marcotte 396755fffb (fix) handle multi-valued mozillasecondemail attribute mapping 2018-07-20 09:44:20 -04:00
InverseBot dc50bd2296 (js/css) Update generated files 2018-07-17 00:29:12 -04:00
Francis Lachapelle 5b9ab00bda (js) Show progress indicator sooner on Calendar 2018-07-16 12:20:33 -04:00
Francis Lachapelle ffac0a9c13 (doc) Add SOGoRefreshView{Check,Intervals} 2018-07-12 14:42:50 -04:00
InverseBot 639ef53600 (js/css) Update generated files 2018-07-12 00:32:20 -04:00
Francis Lachapelle 05e033ccb5 (js) Fix unsafe JS links
Fixes #4508
2018-07-11 14:04:23 -04:00
InverseBot 90d03aa81d (js/css) Update generated files 2018-07-11 00:53:35 -04:00
Francis Lachapelle cb2d66498f (doc) Improve installation guide 2018-07-10 10:32:14 -04:00
Francis Lachapelle 03ef3d0338 Update ChangeLog 2018-07-10 09:51:12 -04:00
Francis Lachapelle c72868c6a4 (js/css) Update generated files 2018-07-10 09:47:30 -04:00
Francis Lachapelle 192957a5d7 (css) Update default theme 2018-07-10 09:45:00 -04:00
Francis Lachapelle 08341c1ce6 Preparation for release 4.0.1 2018-07-10 09:29:11 -04:00
InverseBot f66fc7a4ad (js/css) Update generated files 2018-07-10 00:38:25 -04:00
Francis Lachapelle 120f1280a4 Use matching recipient address when replying
Fixes #4495
2018-07-09 15:49:36 -04:00
Francis Lachapelle d6f85efa8a (css) Respect theme in sg-toggle-grid
Fixes #4500
2018-07-09 10:59:58 -04:00
Francis Lachapelle d8b91bf08e (doc) Improve developer's guide 2018-07-09 09:55:35 -04:00
InverseBot a5ec3cb3ab (js/css) Update generated files 2018-07-07 00:38:01 -04:00
Francis Lachapelle d60fdb8732 (js) Update CKEditor to version 4.10.0 2018-07-06 15:37:59 -04:00
Francis Lachapelle 3ea80065dd Improve allContactSearch action 2018-07-06 15:06:55 -04:00
Francis Lachapelle 1892aafae4 Improve allContactSearch action
We now index results using the first email address of each contact,
which improves the identification of duplicated entries.
2018-07-06 14:03:50 -04:00
Francis Lachapelle c4c1de771c Minor code improvement in SQLSource.m 2018-07-06 12:40:43 -04:00
Francis Lachapelle f23b97fa28 (i18n) Update translations 2018-07-06 11:49:30 -04:00
Francis Lachapelle 45af5ef230 (js) Initialize new contact URL with example 2018-07-06 10:41:36 -04:00
Francis Lachapelle 3eb01aef71 System address is the first user's addresses
In the preferences module, we don't save the user's custom email address
when it matches the system address. This address was considered the last
of all the user's email addresses, which is first, not intuitive, and
second, incorrect when composing a message since the first address is
used by default.

Fixes #3551
2018-07-06 10:28:22 -04:00
Ludovic Marcotte 1039f13f55 (fix) fixed SQL type for autocreation 2018-06-29 13:17:15 -04:00
InverseBot 50ccf58ba4 (js/css) Update generated files 2018-06-29 09:43:16 -04:00
Francis Lachapelle f0636d17fe (js) Update ng to v1.7.2 and md to v1.1.10 2018-06-28 15:49:23 -04:00
Francis Lachapelle e494dbc57c (js) Changes for ui-router v1.0
$urlRouterProvider is deprecated.
2018-06-28 15:44:12 -04:00
Francis Lachapelle a25e0f73be (js) Disable errors on unhandled rejections 2018-06-28 13:44:03 -04:00
Francis Lachapelle 7519a5c234 (js) Stick to grunt-sass v2 for now 2018-06-28 12:16:38 -04:00
Francis Lachapelle a9a751f869 (css) Fix display of submailbox in filter editor 2018-06-28 12:14:55 -04:00
Francis Lachapelle 97e168cab1 (js) Localization 2018-06-28 12:08:32 -04:00
Francis Lachapelle af1e03e335 (css) Fix colors of sgTimepicker 2018-06-28 12:04:59 -04:00
Francis Lachapelle 1e18b36c5a (css) Improve display of advanced mail search 2018-06-28 11:03:03 -04:00
Francis Lachapelle c4109a0f9c (css) Improve .sg-no-wrap 2018-06-28 10:51:36 -04:00
Francis Lachapelle b75593e99a (js) Remove hack when toggling mail accounts 2018-06-28 10:50:16 -04:00
Francis Lachapelle 69ae9d752a (css) Improve display of advanced mail search 2018-06-28 10:45:11 -04:00
Francis Lachapelle 1786ae70da (css) Add default spacing to <p> of HTML messages 2018-06-28 09:44:33 -04:00
Francis Lachapelle 7bd4173388 Revert "Debugging output for subscription issue"
This reverts commit a0582c7e1e.
2018-06-27 15:39:19 -04:00
Francis Lachapelle 213ef0efb5 Revert "Debugging output for subscription issue"
This reverts commit 82d992fc67.
2018-06-27 15:39:18 -04:00
Francis Lachapelle 5fe44b2029 Revert "Debugging output for subscription issue"
This reverts commit fc6aafe4a6.
2018-06-27 15:39:16 -04:00
Francis Lachapelle b6ee4ee0db Revert "Debugging output for subscription issue"
This reverts commit c6e11606e9.
2018-06-27 15:39:14 -04:00
Francis Lachapelle aa41e6d868 Revert "Debugging output for subscription issue"
This reverts commit e33ec4e396.
2018-06-27 15:39:06 -04:00
Francis Lachapelle 821c846864 Revert "Debugging output for subscription issue" 2018-06-27 15:39:02 -04:00
Francis Lachapelle f8cd3fb29c HTML mail: assume body never ends
Fixes #4492
2018-06-27 15:32:54 -04:00
Francis Lachapelle 2b80d62a77 (i18n) Update translations 2018-06-27 14:37:27 -04:00
Ludovic Marcotte a257607a06 (fix) make sure we don't try to encrypt a mail for the Sent folder without cert in place 2018-06-22 11:53:46 -04:00
Ludovic Marcotte 00be330915 (fix) fixed S/MIME code with chained certificates 2018-06-22 08:43:29 -04:00
InverseBot f4cc8450a3 (js/css) Update generated files 2018-06-21 00:38:39 -04:00
Francis Lachapelle 95376ca7dd (js) Fix possible cross-origin exception
When SOGo is launched from an external link, either using a different
"target" or using window.open(), the Mail composer could throw a
JavaScript exception when trying to save or send a message that would
completely stop the operation.

Fixes #3900
2018-06-20 14:51:03 -04:00
Ludovic Marcotte 05c798cce7 (fix) fixed EAS search operation 2018-06-20 13:59:35 -04:00
Francis Lachapelle 93629c7751 Fix delete of occurence in attendees calendars 2018-06-18 09:50:24 -04:00
InverseBot 4c1879f36a (js/css) Update generated files 2018-06-15 00:38:33 -04:00
Francis Lachapelle a69a5b77be (js) Fix some operations in advanced mail search
Fixes #4478
2018-06-14 22:34:38 -04:00
Francis Lachapelle 70d0408230 (css) Force wrapping of pre in HTML content 2018-06-07 14:00:30 -04:00
Francis Lachapelle 976556d402 Merge pull request #242 from kleptox/mail-view-template-fix
Fix ngRepeat:dupes error in template for some email messages
2018-06-07 13:45:23 -04:00
Francis Lachapelle fe362b9f49 (css) Improve server-side CSS sanitizer
Remove HTML comment delimiters, remove CSS comments, really remove
at-rules, really add !important suffix.
2018-06-07 12:33:38 -04:00
root 702426404d Merge branch 'master' of github.com:inverse-inc/sogo 2018-06-07 09:25:07 -04:00
root 10ea78b0cf (js/css) Update generated files 2018-06-07 00:01:47 -04:00
Francis Lachapelle 84286ac1ef (i18n) Add Japanese (ja) translation 2018-06-06 15:25:29 -04:00
Francis Lachapelle 660a2a4b24 (i18n) Add missing strings 2018-06-06 15:22:31 -04:00
Francis Lachapelle 0af459abf7 (i18n) Add Japanese (ja) translation 2018-06-06 12:18:38 -04:00
Ludovic Marcotte 5bd4ae8a4f (fix) more verbose output 2018-06-06 10:41:45 -04:00
Ludovic Marcotte c875012215 (fix) a bit more verbose output 2018-06-06 10:18:20 -04:00
Vladimir Rakov addc231d23 in some email cases template generates ngRepeat:dupes error 2018-06-06 11:34:16 +03:00
Ludovic Marcotte aca2c1b9e8 (fix) also try to get event using its UID before bailing out 2018-06-04 14:47:55 -04:00
Ludovic Marcotte 4084375003 (fix) bumped libcurl requirement for bionic beaver 2018-06-04 13:36:55 -04:00
Francis Lachapelle ef000c2ed1 Debugging output for subscription issue 2018-06-04 10:20:51 -04:00
Francis Lachapelle 0149d7400d (i18n) Add Japanese (ja) translation 2018-06-01 13:22:10 -04:00
Francis Lachapelle e33ec4e396 Debugging output for subscription issue 2018-05-30 12:01:08 -04:00
Francis Lachapelle c6e11606e9 Debugging output for subscription issue 2018-05-28 10:50:54 -04:00
Francis Lachapelle fc6aafe4a6 Debugging output for subscription issue 2018-05-25 08:49:34 -04:00
Francis Lachapelle 82d992fc67 Debugging output for subscription issue 2018-05-24 16:15:33 -04:00
InverseBot 2cbc1ac6eb (js/css) Update generated files 2018-05-19 01:24:52 -04:00
Francis Lachapelle 03b36e0bcd Convert UIxComponentEditor to a SOGoDirectAction
Cleaning up unused templates.
2018-05-18 12:10:10 -04:00
Francis Lachapelle a0582c7e1e Debugging output for subscription issue 2018-05-18 11:19:18 -04:00
Francis Lachapelle e6508e77a9 (js) Fix download of exported folders under iOS 2018-05-18 11:14:01 -04:00
InverseBot 458b724864 (js/css) Update generated files 2018-05-17 01:24:35 -04:00
Francis Lachapelle c966ad60e7 (js) Fix download of exported folders under iOS
Whenever possible, we no longer rely on the FileSaver.js library to
download zip archives. Instead, we do a simple GET on the resource by
changing the window location.
2018-05-16 16:46:29 -04:00
Francis Lachapelle 0c5b5446dd Remove invalid occurrences when saving master 2018-05-16 14:58:04 -04:00
Francis Lachapelle 452083e767 (js) Keep ng-sortable to v1.3.7
This reverts commit 5084fd15fd.
2018-05-16 12:17:21 -04:00
Francis Lachapelle 563a4c7d1e (css) Truncate lists subheader 2018-05-16 11:58:35 -04:00
Francis Lachapelle 3cadcaf4eb Fix sorting of contacts with nil values 2018-05-16 10:10:43 -04:00
Francis Lachapelle d1a4a0d152 (doc) Add link to SimpleSAMLphp webpage 2018-05-15 12:51:05 -04:00
InverseBot f1b741c2e6 (js/css) Update generated files 2018-05-16 01:32:26 -04:00
Francis Lachapelle a9c5b7b292 (js) Stick to ui-router v1.0.15
Because the latest release uses ES6 and we don't.
2018-05-15 12:01:48 -04:00
Francis Lachapelle 5084fd15fd (js) Update ng-sortable to v1.3.8 2018-05-15 11:59:02 -04:00
Francis Lachapelle bbfa2fa7f9 (css,js) Update md to v1.1.9 2018-05-15 11:57:04 -04:00
Francis Lachapelle 65812424d6 (js) Fix mail filters with flags prefixed with $
Fixes #4461
2018-05-14 23:18:59 -04:00
InverseBot 31d7926304 (js/css) Update generated files 2018-05-15 01:25:10 -04:00
Francis Lachapelle 6f042ca7d2 (js) Fix mail filters with flags prefixed with $
Fixes #4461
2018-05-14 10:31:41 -04:00
Francis Lachapelle 371504e997 (js) Cleanup unused function 2018-05-14 10:22:29 -04:00
InverseBot 119591e8dd (js/css) Update generated files 2018-05-14 01:26:18 -04:00
InverseBot 4bb407ad8d (js/css) Update generated files 2018-05-08 02:12:38 -04:00
Francis Lachapelle 12b2ecca72 Show current ordering setting in lists 2018-05-07 16:43:16 -04:00
Francis Lachapelle 71d48dd6b5 (js) Fix renaming a folder under iOS 2018-05-07 10:14:04 -04:00
Francis Lachapelle 8b29d90515 (i18n) Add missing localizable strings 2018-05-03 15:34:33 -04:00
Francis Lachapelle 7222e5a36a Remove dependency on tmpwatch and tmpreaper 2018-05-03 15:28:17 -04:00
Francis Lachapelle a2ef0b41f3 (html) Fix maximum width of admin ACL editor 2018-04-30 15:06:56 -04:00
InverseBot c95d6d0d8e (js/css) Update generated files 2018-04-28 01:23:33 -04:00
Francis Lachapelle f31892044b (sogo-tool) Fix ACLs restore in single store mode
Fixes #4256
Fixes #4385
Fixes #4390
2018-04-27 12:36:40 -04:00
Francis Lachapelle b8958b931e Fix SAML2 session timeout during XHR requests 2018-04-27 11:06:42 -04:00
Ludovic Marcotte f0c8e41820 (doc) sample redirect 2018-04-27 10:58:18 -04:00
Ludovic Marcotte 6405567886 (fix) fixed default data value for c_hascertificate (fixes #4442) 2018-04-27 09:21:20 -04:00
Francis Lachapelle e375575436 (js) Improve handling of reminders on tasks
Fixes #4456
2018-04-27 09:05:20 -04:00
Ludovic Marcotte b0e59f9ac9 Revert "(fix) make sure to use crypt as the scheme for md5/sha256/sha512 (fixes #4137)"
This reverts commit 63cb80142b.
2018-04-27 08:55:13 -04:00
InverseBot 3ac952fd58 (js/css) Update generated files 2018-04-25 01:28:00 -04:00
Francis Lachapelle 1d731ebb77 (js) Fix renaming a folder under iOS 2018-04-23 15:27:00 -04:00
InverseBot c59e429346 (js/css) Update generated files 2018-04-18 01:27:09 -04:00
Francis Lachapelle 162206b934 Fix SAML2 session timeout during XHR requests 2018-04-17 15:14:48 -04:00
Francis Lachapelle e6e1fddb3e (js) Improve handling of reminders on tasks 2018-04-17 11:20:19 -04:00
Francis Lachapelle a4876798bc Show 'Source' btn in HTML editor of signature
Fixes #4389
2018-04-13 09:27:00 -04:00
InverseBot 3659470936 (js/css) Update generated files 2018-03-28 01:35:28 -04:00
Francis Lachapelle e64049c05c (css) Minimum width for icon buttons 2018-03-27 09:30:34 -04:00
Ludovic Marcotte fbed929402 (feat) now possible to show events/task for the current year 2018-03-21 13:44:39 -04:00
Ludovic Marcotte dff85ae1d7 (fix) small fix for task reminders 2018-03-19 09:46:04 -04:00
Ludovic Marcotte 982cbed7cc (fix) avoid potential cache update when breaking sync queries (fixes #4422) 2018-03-15 16:01:50 -04:00
Ludovic Marcotte a601ed47d8 (fix) properly update the last-modified attribute (fixes #4313) 2018-03-15 15:43:26 -04:00
Ludovic Marcotte a0bf8b6f4d (fix) small optimizations + code cosmetics 2018-03-14 13:21:49 -04:00
Ludovic Marcotte c495e14cd7 (fix) improved alarms syncing with EAS devices (fixes #4351) 2018-03-14 13:18:48 -04:00
InverseBot f799716b25 (js/css) Update generated files 2018-03-14 02:18:03 -04:00
Ludovic Marcotte c1e9e355ec (fix) prevent deletion of special folders using del key (fixes #4396) 2018-03-13 13:05:53 -04:00
Ludovic Marcotte 5545c9f26e (fix) update the script to add the c_hascertificate colum 2018-03-12 13:18:02 -04:00
Francis Lachapelle 5d1a6508d0 (tests) Fix variable declaration 2018-03-09 00:43:35 -05:00
InverseBot d57c46a401 (js/css) Update generated files 2018-03-08 01:37:43 -05:00
Francis Lachapelle f27a71e07e (doc) Fix rendering of the Outlook Connector Guide 2018-03-07 15:54:04 -05:00
Francis Lachapelle df2926e872 (js/css) Update generated files 2018-03-07 11:09:20 -05:00
Francis Lachapelle e3ba7c8cab (css) Update default theme 2018-03-07 11:08:01 -05:00
Ludovic Marcotte 1d7bc666d6 Release preparation 2018-03-07 10:58:07 -05:00
Francis Lachapelle 190fa0c77e (i18n) Update translations 2018-03-07 10:49:58 -05:00
Ludovic Marcotte 0667c12db4 (fix) disabled once more EAS v16 as GMail on Android is buggy 2018-03-07 08:32:33 -05:00
InverseBot a911a3b78c (js/css) Update generated files 2018-03-07 01:36:39 -05:00
Francis Lachapelle 2301ae2c75 (js) Allow to set an alarm on a dued task 2018-03-06 16:35:08 -05:00
Francis Lachapelle 5493855b2f (js) Fix caching of iMIP invitation 2018-03-06 15:22:02 -05:00
Francis Lachapelle 4a5446d8ad Update README file 2018-03-05 13:53:48 -05:00
Francis Lachapelle bf34f4f552 Update README file 2018-03-05 13:51:40 -05:00
Francis Lachapelle d49219ceec Save original username in cookie
Fixes #4363
2018-03-01 11:20:37 -05:00
InverseBot 0dc3ed3202 (js/css) Update generated files 2018-02-28 01:27:51 -05:00
Francis Lachapelle a75ae84953 (css) Fix scrolling of message with Firefox
Fixes #4008, #4282, #4398
2018-02-27 09:34:38 -05:00
Ludovic Marcotte d00db81d08 Version bump for new repos 2018-02-26 10:51:17 -05:00
InverseBot 44ea5a29d4 (js/css) Update generated files 2018-02-24 01:27:53 -05:00
Francis Lachapelle 218d8aa5fa (js) New mail filter is active by default 2018-02-23 10:23:21 -05:00
Ludovic Marcotte d02a97468e (fix) EAS with drafts with attachments 2018-02-20 11:15:46 -05:00
Francis Lachapelle 518e6a56fd (js) Overwrite default theme in theme.js 2018-02-20 10:29:08 -05:00
InverseBot da52b0bf82 (js/css) Update generated files 2018-02-20 01:27:41 -05:00
Francis Lachapelle e10dc4af11 (js) Fix retrieval of proper part in image gallery 2018-02-19 15:13:27 -05:00
Francis Lachapelle b8a02d6ce9 (css,js) Update md to v1.1.7
Fixes #4148
2018-02-19 09:01:31 -05:00
Ludovic Marcotte e50e112a96 (fix) correctly handle all-day events with EAS v16 (fixes #4397) 2018-02-14 10:05:44 -05:00
Ludovic Marcotte 9776e9d217 (fix) skip organizer from attendees list (fixes #4402) 2018-02-14 10:00:13 -05:00
Francis Lachapelle e7c56e86d4 Improve doc 2018-02-13 15:25:36 -05:00
Francis Lachapelle 26095d6361 Fix path of single part message 2018-02-13 08:55:30 -05:00
InverseBot 2faf0411e4 (js/css) Update generated files 2018-02-13 01:31:51 -05:00
Francis Lachapelle d3b10730e9 (i18n) Update translations
Fixes #4372
2018-02-12 14:54:18 -05:00
InverseBot a5adb2f952 (js/css) Update generated files 2018-02-08 01:29:16 -05:00
Francis Lachapelle 3bf55a5edf (js) Improve handling of Web calendars 2018-02-07 15:36:54 -05:00
InverseBot b120669747 (js/css) Update generated files 2018-02-07 02:19:11 -05:00
Francis Lachapelle bccce4022e Identation + comments 2018-02-06 16:20:20 -05:00
Francis Lachapelle 32fd61c8f4 Improve display of overlapping events
Categories were hidden because of overlapping boxes.
2018-02-06 14:13:40 -05:00
Francis Lachapelle 7cd040fb6b Show weekday in headers of day view 2018-02-06 14:06:33 -05:00
Francis Lachapelle 9310a289f6 Fix decoding of spaces in URL-encoded parameters 2018-02-06 11:04:21 -05:00
Francis Lachapelle 006859cee1 (css) Better highligh color in autocompletion 2018-02-06 11:01:25 -05:00
Francis Lachapelle 9fddc66007 (i18n) Update translations
Fixes #4372
2018-02-06 10:28:29 -05:00
InverseBot ed6e191f66 (js/css) Update generated files 2018-02-06 01:29:10 -05:00
Francis Lachapelle 099f6b42dc (js) Ignore exception when closing mail editor 2018-02-05 15:48:09 -05:00
Francis Lachapelle c5a324ae86 Fix saving new IMAP auxiliary account
Fixes #4384
2018-02-05 14:38:15 -05:00
InverseBot e265ecfe1b (js/css) Update generated files 2018-02-04 01:27:42 -05:00
InverseBot faed42094f (js/css) Update generated files 2018-02-03 01:28:30 -05:00
InverseBot 40b0704812 (js/css) Update generated files 2018-02-01 01:29:33 -05:00
Francis Lachapelle e29ce4acec (js) Improve popup detection in mail editor
Fixes #4378
2018-01-31 10:02:47 -05:00
Francis Lachapelle 29047c4692 (css,js) Update md to v1.1.6 2018-01-31 08:46:52 -05:00
InverseBot 86b896e532 (js/css) Update generated files 2018-01-31 01:30:02 -05:00
Francis Lachapelle 8ae8d67c0c (i18n) Update French translation 2018-01-30 16:08:56 -05:00
Francis Lachapelle ad943bf2aa (js) Fix URL of file uploader in mail editor 2018-01-30 15:37:33 -05:00
Francis Lachapelle 1be0808a16 i(i18n) Fix string in Preferences module 2018-01-30 14:21:29 -05:00
Francis Lachapelle 2fceae86dd (script) Continue even if an SQL error occurs 2018-01-26 10:10:41 -05:00
Ludovic Marcotte 750c720a73 (doc) re-encoded the doc 2018-01-25 10:50:48 -05:00
Ludovic Marcotte 24123e78da (doc) improved doc 2018-01-25 10:50:07 -05:00
Ludovic Marcotte e2ee90f2ef (doc) removed unnecessary image 2018-01-25 10:18:35 -05:00
Ludovic Marcotte e47640a06d (fix) moved old doc away 2018-01-25 10:14:33 -05:00
Ludovic Marcotte b2703f4ddc (fix) handle 9 tables structure in v4 update scripts 2018-01-25 10:12:07 -05:00
Ludovic Marcotte 19753f56f7 (doc) update doc 2018-01-25 09:56:10 -05:00
InverseBot 8305d30cb7 (js/css) Update generated files 2018-01-25 02:18:01 -05:00
Francis Lachapelle 23d0b68e57 Add missing subject to junk/not junk mail reports 2018-01-24 16:21:55 -05:00
Francis Lachapelle f88b46c78f (fix) Keep remote images when composing a HTML msg 2018-01-24 16:00:19 -05:00
Ludovic Marcotte e93727d3f0 Updated NEWS 2018-01-24 14:37:06 -05:00
Ludovic Marcotte 2ccf7a5514 Revert "(fix) avoid advertising EAS 16 support until libwbxml is fixed"
This reverts commit 919d1ef6be.
2018-01-24 14:19:45 -05:00
Francis Lachapelle 1528dc4dd0 Improve contacts search when no scope is set 2018-01-24 11:58:55 -05:00
Francis Lachapelle d05477499f (js) Always show center list when no card selected 2018-01-24 10:36:22 -05:00
Francis Lachapelle 7897ea58fe Fix notifications of signed + encrypted messages 2018-01-24 10:32:36 -05:00
InverseBot a35138c0b8 (js/css) Update generated files 2018-01-24 02:17:38 -05:00
Francis Lachapelle 8e35becd93 (js) Respect security preferences in mail editor 2018-01-23 22:23:14 -05:00
Francis Lachapelle 7ebdac5525 Improve display of S/MIME certificates 2018-01-23 13:30:56 -05:00
Ludovic Marcotte 511aa63a34 (fix) remaining S/MIME fixes to handle image/CIDs in HTML mails 2018-01-23 10:35:46 -05:00
Francis Lachapelle 341e5cbab0 Merge pull request #239 from andryyy/patch-1
Do not fail on duplicates in identities
2018-01-22 08:24:09 -05:00
André Peters 0e673beb22 Do not fail on duplicates in identities
Duplicates are bad, but when tracked by $index, the mailer editor does at least not block the "from" selection field completly. :-)
2018-01-22 08:57:54 +01:00
Francis Lachapelle d80f2462f0 (fix) Message signature detection 2018-01-19 13:46:19 -05:00
Francis Lachapelle b8812d64e8 (fix) Automatic certificate update in Address book 2018-01-19 13:33:02 -05:00
Francis Lachapelle b8c20b24e5 (fix) Message signature detection 2018-01-19 13:31:05 -05:00
Ludovic Marcotte e1cb7f385f (fix) moved the logic for certificate retrieval 2018-01-19 10:10:04 -05:00
Francis Lachapelle c2169a1f72 Web-based management of email certificate (cont'd) 2018-01-19 09:29:28 -05:00
Francis Lachapelle 2fc8018b52 (js) Fix changes check in Preferences module 2018-01-18 21:56:30 -05:00
Francis Lachapelle bca655ffdd (css) Fix server-side CSS cleaner
Fixes #4366
2018-01-17 13:58:42 -05:00
Francis Lachapelle d4c8f5089b (css) Reset H{1-6} headers
Fixes #4123
2018-01-17 12:43:06 -05:00
Francis Lachapelle 5b711dea8f Improve display of signed/encrypted message 2018-01-17 11:17:22 -05:00
Francis Lachapelle 4133a0b954 (js) Draft: update subject in list/detail views
Update the subject everywhere when saving a draft.
2018-01-17 11:04:22 -05:00
Francis Lachapelle b39d3db674 (i18n) Update German translation 2018-01-17 10:21:18 -05:00
Ludovic Marcotte 30817079f2 (fix) properly handle CID images in S/MIME signed messages 2018-01-13 11:47:13 -05:00
InverseBot a33df49331 (js/css) Update generated files 2018-01-13 02:22:46 -05:00
Francis Lachapelle e86efe59fd (js) Restore live update of flags in messages list 2018-01-12 16:30:05 -05:00
Francis Lachapelle c29e0a1a3d Improve error message for S/MIME signature 2018-01-12 15:20:09 -05:00
Francis Lachapelle 5ba683d4b1 Web-based management of email certificate (cont'd) 2018-01-12 15:00:51 -05:00
Francis Lachapelle 15de264967 Web-based management of email certificate (cont'd) 2018-01-12 14:47:31 -05:00
Ludovic Marcotte 5767419554 (fix) find the proper container (fixes #4371) 2018-01-11 11:10:35 -05:00
InverseBot 8d0f419acf (js/css) Update generated files 2018-01-11 01:31:21 -05:00
Francis Lachapelle 451133f226 (js) Remove JavaScript debugging 2018-01-10 09:04:23 -05:00
Francis Lachapelle ed3fe1ecc2 (js) Improve alarm description 2018-01-10 09:04:23 -05:00
InverseBot da4e2e92bd (js/css) Update generated files 2018-01-10 01:33:24 -05:00
Ludovic Marcotte b73e65ebeb (fix) disabled OC packaging 2018-01-09 19:08:30 -05:00
Francis Lachapelle d6c1fad2fc Improve display of message options 2018-01-09 16:05:22 -05:00
Francis Lachapelle 6cc96301f8 View smime certificate of signed messages (cont'd) 2018-01-09 15:55:32 -05:00
Francis Lachapelle 02d1aa12f9 View smime certificate of signed messages 2018-01-09 15:22:04 -05:00
Ludovic Marcotte a44118d68f (feat) new guide for Outlook connector configuration 2018-01-08 09:35:43 -05:00
Ludovic Marcotte c875302a86 (fix) proper handling of file attachments in S/MIME encrypted mails 2018-01-05 13:55:05 -05:00
Francis Lachapelle 2f1c8cdbc8 (i18n) Fix Lithuanian weekday names
Fixes #4370
2018-01-05 08:43:59 -05:00
Ludovic Marcotte 7824c35d95 (fix) better handling of encrypted message sending 2018-01-04 11:30:00 -05:00
Ludovic Marcotte 48d94980b4 (fix) cleanups 2018-01-04 10:44:15 -05:00
Ludovic Marcotte 20e8fd852c (doc) initial S/MIME doc 2018-01-04 09:59:24 -05:00
Ludovic Marcotte 8ab73fa76b More OpenChange disabling stuff... 2018-01-04 09:52:37 -05:00
Ludovic Marcotte 2d6246d635 Moved OpenChange to Attic, we no longer support this. 2018-01-04 09:10:00 -05:00
InverseBot 0287f34bca (js/css) Update generated files 2017-12-25 01:32:34 -05:00
Ludovic Marcotte 879e7a6cd5 (fix) added missing template 2017-12-24 06:49:22 -05:00
InverseBot 0ec60788d8 (js/css) Update generated files 2017-12-24 01:28:39 -05:00
Ludovic Marcotte ada9c57ef7 (feat) trivial warning for encrypted mails 2017-12-23 09:36:22 -05:00
Ludovic Marcotte 643c6b7ebf (fix) cleanups and proper handling when trying to decrypt email with no cert 2017-12-23 09:34:26 -05:00
Ludovic Marcotte 35c7f483d9 (feat) handling of encrypted mails in generic viewer handler 2017-12-23 09:21:28 -05:00
Ludovic Marcotte c80f016c18 (feat) handling of encrypted multipart/mixed 2017-12-23 09:07:14 -05:00
Ludovic Marcotte 8727024857 (feat) handling of encrypted and signed mails 2017-12-23 09:05:59 -05:00
Ludovic Marcotte a73b20fa02 (feat) handling of encrypted multiplart/alternative 2017-12-23 09:04:36 -05:00
Ludovic Marcotte 502b59bc08 (feat) handling of encypted HTML parts 2017-12-23 09:02:32 -05:00
Ludovic Marcotte 3f95d53de8 (feat) new viewer handler for encrypted emails 2017-12-23 08:59:32 -05:00
Ludovic Marcotte 72273bf454 (fix) cleanups 2017-12-23 08:57:45 -05:00
Ludovic Marcotte 496b402d17 (fix) cosmetics 2017-12-23 08:57:05 -05:00
Ludovic Marcotte 695afc670f (feat) new encrypted viewer + cosmetics in text one 2017-12-23 08:56:29 -05:00
Ludovic Marcotte 54d04741fa (feat) add PKCS7 cert to contacts when possible 2017-12-23 07:31:21 -05:00
Ludovic Marcotte 74d41ecb34 (feat) added signing+encryption support 2017-12-23 07:20:08 -05:00
Ludovic Marcotte 2a272f0aa7 (feat) added PKCS12 import/removal 2017-12-23 07:18:20 -05:00
Ludovic Marcotte 95bf606bf2 (feat) added S/MIME composition support 2017-12-23 07:15:47 -05:00
Ludovic Marcotte 6ce1fa42a2 (feat) adjusted makefile for S/MIME code 2017-12-23 06:48:09 -05:00
Ludovic Marcotte 793fc9024f (feat) added NSData S/MIME decoding/encoding/translation class 2017-12-23 06:47:34 -05:00
Ludovic Marcotte 71dd9d7d91 (feat) added S/MIME support for content fetch when replying/forwarding mails 2017-12-23 06:35:38 -05:00
Ludovic Marcotte e27e558cb2 (fix) cosmetics 2017-12-23 06:11:22 -05:00
Ludovic Marcotte 96d62c432b (fix) made the code a bit more robust 2017-12-23 06:10:11 -05:00
Ludovic Marcotte 6294d91180 (feat) added S/MIME file download support 2017-12-23 06:06:23 -05:00
Ludovic Marcotte 64a7b8a797 (fix) cosmetics 2017-12-23 05:48:31 -05:00
Ludovic Marcotte f880d1aa54 (feat) added S/MIME support for body key lookups 2017-12-23 05:47:31 -05:00
Ludovic Marcotte 915fad335a (fix) enable SSL flags 2017-12-23 05:15:39 -05:00
Ludovic Marcotte 5e26ff6d1d (feat) show sign/encrypt options (unconditionaly right now) 2017-12-23 05:09:45 -05:00
Ludovic Marcotte 94f7050cb8 (fix) renamed update scripts to v4 2017-12-23 05:08:55 -05:00
Ludovic Marcotte f95170e043 (fix) cosmetics 2017-12-23 05:07:54 -05:00
Ludovic Marcotte 81e07f0105 (fix) cosmetics 2017-12-23 05:04:13 -05:00
Ludovic Marcotte 8f2bcb6055 (fix) cosmetics 2017-12-23 05:03:18 -05:00
Ludovic Marcotte 42bf30d05e (fix) rename for more clarity 2017-12-23 05:00:36 -05:00
Ludovic Marcotte 8a4ebe2c60 (feat) can now associate certificate (PEM format) on mail account 2017-12-23 04:53:41 -05:00
Ludovic Marcotte 979ec2c3a1 (fix) cosmetics 2017-12-23 04:51:06 -05:00
Ludovic Marcotte 58f4c72c47 (fix) cosmetics 2017-12-23 04:49:57 -05:00
Ludovic Marcotte af641bbead (fix) cosmetics 2017-12-23 04:49:25 -05:00
Ludovic Marcotte 873faf468f (fix) cosmetics 2017-12-23 04:47:28 -05:00
Ludovic Marcotte f5db41584b (fix) cosmetics 2017-12-23 04:46:43 -05:00
Ludovic Marcotte 2952a69785 (feat) new helper method to find contact and certificate in all address books 2017-12-23 04:42:56 -05:00
Ludovic Marcotte 394e7e7e88 (feat) handling of c_hascertificate 2017-12-23 04:37:12 -05:00
Ludovic Marcotte f662781312 (feat) new c_hascertificate column in contact quick tables and migration scripts 2017-12-23 04:34:49 -05:00
Ludovic Marcotte 6c993be9f1 (feat) add KEY support for certificate handling 2017-12-23 04:31:43 -05:00
InverseBot 8afa87e953 (js/css) Update generated files 2017-12-22 01:28:55 -05:00
Francis Lachapelle 4b355f532d Initial Web-based management of email certificate 2017-12-21 16:41:06 -05:00
Francis Lachapelle 429a3bedb9 Fix handling of public access rights of Calendars 2017-12-21 16:06:39 -05:00
InverseBot b89752cd39 (js/css) Update generated files 2017-12-20 01:30:19 -05:00
Francis Lachapelle 9ed23c32f2 (i18n) Update translations 2017-12-19 10:26:16 -05:00
Francis Lachapelle 28a37de613 Use address books search fields in Contacts module
Fixes #4356
2017-12-19 10:06:01 -05:00
Francis Lachapelle 60bbe26289 (js) Catch some exceptions to avoid console errors 2017-12-19 09:53:48 -05:00
InverseBot 37074086cf (js/css) Update generated files 2017-12-19 01:29:54 -05:00
Francis Lachapelle c9c5f8bba9 (html) Add placeholder in Sieve filter editor 2017-12-18 16:07:10 -05:00
Francis Lachapelle 97147e261b (html) Clarify warning in mail composer 2017-12-18 16:03:25 -05:00
Francis Lachapelle 732f81b44b Update NEWS file 2017-12-18 15:50:44 -05:00
Francis Lachapelle 3b411101cd (js) Sort categories in event and task editors
Fixes #4349
2017-12-18 15:49:41 -05:00
Francis Lachapelle 8d38be1e43 Support for events with recurrence dates (cont'd) 2017-12-18 15:36:01 -05:00
Francis Lachapelle de91b57825 Fix handling of public access rights of Calendars
Fixes #4344
2017-12-18 15:31:43 -05:00
InverseBot e6e5e077bd (js/css) Update generated files 2017-12-16 01:28:47 -05:00
Francis Lachapelle e590aec64f (js) Fix exception in Card service
When calling init from $reset, the birthday attribute is already a Date
object. Avoid raising an exception on wrong data type.
2017-12-15 16:36:15 -05:00
Francis Lachapelle 3816d25a44 (js) Make sure mail identities are unique
Fixes #4338
2017-12-15 16:30:37 -05:00
Francis Lachapelle 7f99514744 Add support for events with recurrence dates 2017-12-15 16:18:39 -05:00
Francis Lachapelle e61a55f30e (css) Fix fab button placement in Mail module
Fixes #4358
2017-12-15 16:18:39 -05:00
InverseBot e7a4384f28 (js/css) Update generated files 2017-12-13 01:30:52 -05:00
Francis Lachapelle b3f2fba4da (css) Fix advanced mailbox search
We must rely on the pseudo-input-container to properly wrap the
md-select inside a md-toolbar.
2017-12-12 12:55:26 -05:00
Francis Lachapelle d526efa501 Remove null characters from JSON responses 2017-12-07 16:07:25 -05:00
InverseBot 38790af774 (js/css) Update generated files 2017-12-06 01:25:18 -05:00
Francis Lachapelle c45c691bf9 (js) Fix search in contact list creator 2017-12-04 15:36:29 -05:00
Francis Lachapelle 73201a0314 (i18n) Contacts module 2017-12-01 17:17:10 -05:00
InverseBot fc7706abd0 (js/css) Update generated files 2017-12-01 01:26:40 -05:00
Francis Lachapelle 8e1a19dca2 (js) Force copy of dragged contacts from remote AB 2017-11-30 11:25:11 -05:00
InverseBot 7ddecd4006 (js/css) Update generated files 2017-11-27 01:27:38 -05:00
InverseBot c9c6b0dc9f (js/css) Update generated files 2017-11-25 01:28:04 -05:00
Francis Lachapelle 2c86f68fb9 (js) Catch some exceptions to avoid console errors 2017-11-24 09:35:24 -05:00
InverseBot 27ce401e6b (js/css) Update generated files 2017-11-24 01:28:49 -05:00
Francis Lachapelle 39e579e656 Fix class security in Mailer 2017-11-23 14:24:30 -05:00
Francis Lachapelle 30c361a56b Fix Sieve path of mailboxes for filter editor 2017-11-23 14:14:29 -05:00
Francis Lachapelle 1d90aa748d (js) Don't try to select "noselect" mailbox 2017-11-23 14:03:22 -05:00
Francis Lachapelle 7874b0a74c Fix compilation warning 2017-11-23 13:59:49 -05:00
Francis Lachapelle 6ab4688812 (i18n) Contacts module 2017-11-23 13:59:06 -05:00
Francis Lachapelle 12fa8ef65a (css) Fix scrolling in Administration module 2017-11-23 11:26:59 -05:00
Francis Lachapelle 0608a0bec8 Update NEWS file 2017-11-22 10:09:11 -05:00
Francis Lachapelle a7b32e8c6d Avoid redirection to forbidden module 2017-11-22 10:02:47 -05:00
Francis Lachapelle d6e74cf9cb Fix compilation warning 2017-11-22 09:30:19 -05:00
Francis Lachapelle e8b29add3a Fix calls to fetchContactsMatching: 2017-11-22 09:28:34 -05:00
InverseBot e04b281864 (js/css) Update generated files 2017-11-22 01:27:36 -05:00
Francis Lachapelle eb90760b39 Use address books search fields in Contacts module
Searches can now be scoped to one or multiple fields. Those fields are
now dynamic and can be defined using SearchFieldNames in external
contacts sources (SQL and LDAP).
2017-11-21 15:56:16 -05:00
InverseBot aed62cab26 (js/css) Update generated files 2017-11-18 01:25:43 -05:00
Francis Lachapelle d665f4b251 (js) Fix parsing of pasted email addresses
We are now more clever when parsing the input text to add new attendees
to an appointment.
2017-11-17 11:36:19 -05:00
InverseBot e588becf79 (js/css) Update generated files 2017-11-17 01:26:08 -05:00
Francis Lachapelle a2129f3e4a ModulesConstraints and listRequiresDot for SQL
SQL sources used for authentication can now have module constraints.
Entries of SQL sources used as address books can now be displayed
automatically.
2017-11-16 21:46:44 -05:00
Francis Lachapelle 08ec68c07c (js) Lower constraints on auto-reply dates range
Fixes #7276
2017-11-16 15:33:04 -05:00
Francis Lachapelle 3c30997bf5 Don't expose Web calendars to other users
Fixes #4331
2017-11-16 11:41:36 -05:00
InverseBot 80886afadd (js/css) Update generated files 2017-11-13 01:27:24 -05:00
Francis Lachapelle 4a40230f23 Rollback previous fix 2017-11-10 11:25:59 -05:00
Francis Lachapelle 00af2613b6 (fix) Don't restore deleted events of attendees 2017-11-10 11:18:30 -05:00
InverseBot 9335ee67c1 (js/css) Update generated files 2017-11-10 01:27:47 -05:00
Francis Lachapelle c5e2a6bcb9 Update NEWS file 2017-11-09 18:25:22 -05:00
Francis Lachapelle 5ff28a37e2 (js) Restore msgs selection after refresh
Fixes #4330
2017-11-09 18:18:22 -05:00
InverseBot 2b9cc20689 (js/css) Update generated files 2017-11-09 01:26:38 -05:00
Francis Lachapelle e7c15a697d (js) Fix mail composition from message headers
Fixes #4335
2017-11-08 16:40:33 -05:00
Francis Lachapelle 38d4a26827 Avoid calls on null objects
Fixes #4329
2017-11-08 16:24:26 -05:00
InverseBot 650faa4d22 (js/css) Update generated files 2017-11-02 01:27:55 -04:00
Francis Lachapelle c68d7204a1 (js) Handle corrupted JSON data in Mail module 2017-11-01 13:29:46 -04:00
InverseBot ae0fff23b5 (js/css) Update generated files 2017-11-01 01:28:44 -04:00
Francis Lachapelle ccb1439c84 (js) Handle corrupted JSON data in Mail module
The Mail module will now be loaded even if the JSON representing the
list of expanded mailboxes is not a properly formatted.
2017-10-31 13:25:51 -04:00
Francis Lachapelle c7e9b0e3a6 Merge pull request #238 from drscream/fix/standard-macro
Fix standard visibility macro use
2017-10-27 15:24:36 -04:00
Francis Lachapelle 9d45d57cb2 Check range before adding single occurrences 2017-10-25 15:18:28 -04:00
Francis Lachapelle 70dbba877a Add OCSCacheFolderURL parameter in update script
Fixes #4324
2017-10-24 15:30:30 -04:00
Francis Lachapelle fe75cb3940 Make db port optional in update script
Fixes #4323
2017-10-24 15:14:20 -04:00
Francis Lachapelle 141af57e61 Make db port optional in update script
Fixes #4323
2017-10-24 15:11:41 -04:00
Francis Lachapelle f5aeed444d Increase mail column size of Contacts quick tables
Fixes #4322
2017-10-24 14:19:25 -04:00
InverseBot b56df72992 (js/css) Update generated files 2017-10-24 01:27:51 -04:00
Francis Lachapelle e3505808dc (js) Force version of ng-sortable
Rollback to version 1.3.7 of ng-sortable until the following buy is
fixed: https://github.com/a5hik/ng-sortable/issues/387
2017-10-23 16:11:44 -04:00
InverseBot 1fd4657de7 (js/css) Update generated files 2017-10-19 02:14:42 -04:00
Francis Lachapelle 2d61be8ff6 (i18n) Update translations 2017-10-18 11:04:26 -04:00
Ludovic Marcotte 2b5bfff06d Updated NEWS 2017-10-18 09:42:13 -04:00
Ludovic Marcotte b6d657d001 (fix) generalized HTML sanitization to avoid encoding issues when replying/forwarding mails
Conflicts:
	SoObjects/Mailer/NSData+Mail.m
2017-10-18 09:41:45 -04:00
InverseBot 38e898dc5d (js/css) Update generated files 2017-10-18 01:28:13 -04:00
InverseBot 9b434bb859 (js/css) Update generated files 2017-10-17 01:26:42 -04:00
Francis Lachapelle aa7193d722 (js) Encode ID of components in XHR requests 2017-10-16 10:32:06 -04:00
Francis Lachapelle 8df50f9ab7 (js) Fix exception when importing events 2017-10-16 10:31:06 -04:00
Francis Lachapelle 92c96bc04c (css) Improve display of secondary info of events 2017-10-16 10:30:22 -04:00
InverseBot 8b6aa7fb88 (js/css) Update generated files 2017-10-13 01:28:09 -04:00
Francis Lachapelle e59a8e12ba (js) Allow edition of IMAP flags/labels 2017-10-12 15:44:14 -04:00
Francis Lachapelle 8b02db7b8c Fix yearly recurrences calculator with until date 2017-10-12 10:19:01 -04:00
Francis Lachapelle e5f9f3383a (js) Fix automatic close of sidenav 2017-10-12 10:16:51 -04:00
InverseBot 6a661264f6 (js/css) Update generated files 2017-10-11 02:18:36 -04:00
Francis Lachapelle f34937d92c (js) Prevent the creation of empty card categories 2017-10-10 14:55:22 -04:00
Francis Lachapelle 888adc9396 (js) Improve rename of address book
Fixes impossibility to insert spaces in address book name.
2017-10-10 14:29:38 -04:00
InverseBot c4be6a2114 (js/css) Update generated files 2017-10-08 01:25:12 -04:00
InverseBot 7b1e7e2e7b (js/css) Update generated files 2017-10-07 01:25:04 -04:00
Ludovic Marcotte a7529ecabf Updated NEWS 2017-10-03 09:15:33 -04:00
Ludovic Marcotte 9b20a8377a (fix) properly extract IMAP folder name (fixes #4275) 2017-10-03 09:13:56 -04:00
InverseBot b3f4a8f8c3 (js/css) Update generated files 2017-10-01 01:24:13 -04:00
Francis Lachapelle a313068595 (css) Add missing CKEditor files 2017-09-29 10:05:16 -04:00
Francis Lachapelle 861ce9ac53 (doc) How to change the color theme 2017-09-26 22:53:02 -04:00
Francis Lachapelle 7f8693948f (i18n) Untabify 2017-09-26 10:47:34 -04:00
Francis Lachapelle 24a41f20d2 (i18n) Update Croatian translation 2017-09-26 10:46:54 -04:00
Francis Lachapelle 1e0b71bbda (doc) How to change the color theme 2017-09-25 12:13:48 -04:00
Francis Lachapelle 5ed99af021 Update NEWS file 2017-09-25 09:37:12 -04:00
Ludovic Marcotte fe8f08c807 (fix) fixed previous commit 2017-09-22 10:36:01 -04:00
InverseBot 2ea7cefa3e (js/css) Update generated files 2017-09-22 01:28:42 -04:00
Ludovic Marcotte 6b6f70ce9d (feat) more verbose output 2017-09-21 14:00:28 -04:00
Ludovic Marcotte 6730db74e6 (fix) now also give modify permission 2017-09-21 13:59:55 -04:00
InverseBot aa7febe15b (js/css) Update generated files 2017-09-21 01:26:42 -04:00
Francis Lachapelle 9e2f22d331 Update NEWS file 2017-09-20 21:44:43 -04:00
Francis Lachapelle 104ac2db33 New SOGoMailComposeWindow default 2017-09-20 16:50:41 -04:00
Francis Lachapelle 789398bd27 (web) Fix XSRF cookie path when changing password
Fixes #4139
2017-09-19 09:44:37 -04:00
InverseBot 391410a4ec (js/css) Update generated files 2017-09-19 09:08:25 -04:00
Francis Lachapelle 106ae7a078 Improve handling of notifications of a calendar 2017-09-18 14:22:29 -04:00
Francis Lachapelle d02f0db0b4 (js) Remove non-ascii characters from CSS ids 2017-09-18 12:11:12 -04:00
Francis Lachapelle 8c5977088f Typo
Fixes #4284
2017-09-12 05:39:47 -04:00
Francis Lachapelle 3fa0baa396 Fix Carddav class for Python integration tests 2017-09-12 09:32:29 -04:00
InverseBot b896897c3e (js/css) Update generated files 2017-09-12 01:34:42 -04:00
Francis Lachapelle 2f89c5d4a7 Fix Carddav class for Python integration tests 2017-09-11 13:58:27 -04:00
InverseBot e73c42ada3 (js/css) Update generated files 2017-09-09 01:36:14 -04:00
Francis Lachapelle 77f9f60276 New events list view 2017-09-08 13:35:31 -04:00
Francis Lachapelle 614a137128 (js) Fix parsing of tab-delimited email addresses
Fixes #4258
2017-09-08 10:50:10 -04:00
Francis Lachapelle aa3c02be93 Fix to save many postal addresses of tge same type
Fixes #4091
2017-09-07 16:30:22 -04:00
Francis Lachapelle 24382a4318 Add missing localized string 2017-09-07 14:22:26 -04:00
Francis Lachapelle 3189e0e13a LDIF to vCard: inverse values of "ou" and "o"
Fixes #4278
2017-09-07 13:41:51 -04:00
Ludovic Marcotte e0b0c9c2c1 Updated NEWS 2017-09-06 10:26:09 -04:00
Ludovic Marcotte 7e4e2863b6 (fix) properly decode IMAP encoded folder names (fixes #4240) 2017-09-06 10:24:18 -04:00
InverseBot 649337c3e5 (js/css) Update generated files 2017-09-06 00:32:04 -04:00
Francis Lachapelle ac376bbba9 Update Chinese (Taiwan) translation 2017-09-05 13:37:54 -04:00
Francis Lachapelle 7a76675864 Update README for new ChineseChina translation
Fixes #4271
2017-09-05 12:17:55 -04:00
Francis Lachapelle 752323fb7d Add Simplified Chinese (zh_CN) translation 2017-09-05 12:10:46 -04:00
Francis Lachapelle 141b3af83b (js) Always show center list when no msg selected
Fixes #4269
2017-09-05 10:18:52 -04:00
Francis Lachapelle 8697b6c835 (js) Remove non-ascii characters from CSS ids 2017-09-05 10:18:52 -04:00
InverseBot 536b02b9fd (js/css) Update generated files 2017-09-02 01:35:50 -04:00
Francis Lachapelle 02cbe23e78 (js) New sgCalendarListItem component 2017-09-01 12:35:38 -04:00
Francis Lachapelle 84edeb85cd (js) Fix parsing of pasted email addresses
Fixes #4258 and fixes #4097
2017-09-01 11:09:24 -04:00
Francis Lachapelle dff30d61fb (fix) Update the proper occurrence
When editing one occurrence of a recurrent event with attendees, update
the proper occurrence in each attendee's calendar.
2017-08-31 14:40:54 -04:00
InverseBot 933649c299 (js/css) Update generated files 2017-08-31 01:35:23 -04:00
Francis Lachapelle cb2ab9152f (js) Don't change user language when not changed
Fixes #4244
2017-08-30 14:18:23 -04:00
Francis Lachapelle 1ac910bdd1 (doc) Precise SOGoVacationEnabled cron requirement 2017-08-30 11:00:00 -04:00
InverseBot f3a766d8b0 (js/css) Update generated files 2017-08-30 01:35:27 -04:00
Francis Lachapelle a65e96bdb5 (js) follow requested URL after authentication 2017-08-29 16:03:19 -04:00
Francis Lachapelle ee7fdcba9f Improve cache cleanup when removing a group ACL 2017-08-29 15:13:15 -04:00
Francis Lachapelle 491e090fb4 (web) Fix "last day of the month" repeat rule 2017-08-29 14:29:11 -04:00
Francis Lachapelle 5e5e52e3f1 register web app as a handler for mailto scheme
Fixes #1223
2017-08-29 11:45:24 -04:00
Francis Lachapelle c277c397e7 Remove duplicate key in SOGoDefaults.plist 2017-08-28 09:54:10 -04:00
Francis Lachapelle ccf9ceb729 (doc) Explain SOGoMailAddOutgoingAddresses default 2017-08-28 09:30:22 -04:00
Ludovic Marcotte 2a046557ac (fix) increased column size of settings/defaults for MySQL (fixes #4260) 2017-08-24 16:12:14 -04:00
InverseBot debe1f41f8 (js/css) Update generated files 2017-08-24 01:32:29 -04:00
Ludovic Marcotte 5b19c8bf8b Updated NEWS 2017-08-23 15:46:20 -04:00
Ludovic Marcotte c29c6dc621 (fix) properly encode MIME parts with embedded images in HTML parts (fixes #4150) 2017-08-23 15:45:14 -04:00
Francis Lachapelle 399397bd79 Only discard mails if vacation conditions match
Fixes #4245
2017-08-23 14:14:45 -04:00
Francis Lachapelle 9495c43b4b (css) Improve attachments area of mail composer
Fixes #4243
2017-08-23 11:55:09 -04:00
Ludovic Marcotte 37ffe889b5 (doc) small section fix 2017-08-22 15:39:04 -04:00
Francis Lachapelle c6dbb88dc1 Simplify sanitization of accepted HTML attributes
This will avoid converting & to an HTML entity.
2017-08-22 10:02:28 -04:00
InverseBot 1ac2ec7ad6 (js/css) Update generated files 2017-08-22 01:34:10 -04:00
Francis Lachapelle 8df0896028 (js) Fix error handling in mail editor popup 2017-08-21 15:25:26 -04:00
Thomas Merkel e35988e669 Fix standard visibility macro use
Expect crypt(3) to be provided by unistd.h, not the ancient crypt.h.
Update _XOPEN_SOURCE for SUSv3 / POSIX.1-2001
2017-08-21 18:09:39 +02:00
InverseBot 4d271a6d85 (js/css) Update generated files 2017-08-19 01:29:24 -04:00
Ludovic Marcotte fdf755dbee Fixed typo 2017-08-15 09:18:59 -04:00
Ludovic Marcotte fb1e00be81 Updated NEWS 2017-08-15 09:17:42 -04:00
Ludovic Marcotte c35e54e4fc (fix) use NSInteger instead, more clean 2017-08-14 14:26:28 -04:00
Ludovic Marcotte 66685d9f7f (fix) offset can be negative (fixes #4237) 2017-08-14 14:01:39 -04:00
InverseBot b7c8f43bcc (js/css) Update generated files 2017-08-13 01:32:35 -04:00
Francis Lachapelle 45a5b533a3 (web) Improve event lists results 2017-08-02 18:31:06 -04:00
Francis Lachapelle c810e60a04 Update Welsh translation 2017-08-02 09:24:59 -04:00
Francis Lachapelle 03887cb395 Update Welsh locale 2017-08-01 13:41:04 -04:00
Francis Lachapelle 9b64a1bddf (web) Don't allow to move a read-only event
Fixes #4228
2017-07-31 14:56:35 -04:00
InverseBot 893873db22 (js/css) Update generated files 2017-07-28 01:29:55 -04:00
Francis Lachapelle 8221a8de66 (Calendar) Add owner in attendees editor 2017-07-27 16:50:03 -04:00
Francis Lachapelle 217525cf10 (js) Add missing languages for CKEditor 2017-07-20 13:47:06 -04:00
Francis Lachapelle c975cf6c78 Add missing localized strings in Calendar module 2017-07-19 20:34:49 -04:00
Francis Lachapelle 68adf8969a (fix) Basque label with quotes used in aria-label
Fixes #4234
2017-07-19 17:12:39 -04:00
Francis Lachapelle 589c5f8ae0 Add missing localized strings in Calendar module 2017-07-19 17:10:06 -04:00
Ludovic Marcotte 1a76ade0ec (test) disabled the dance test for now, it's no longer relevant 2017-07-19 11:17:14 -04:00
Ludovic Marcotte 032b2fbbd4 (fix) can now invite to exceptions only (fixes #2561) 2017-07-19 11:05:16 -04:00
Francis Lachapelle 277342dced Update Welsh translation 2017-07-17 08:44:52 -04:00
Francis Lachapelle 2adc11bcd6 (css) Fix minimalist skin of CKEditor in Firefox 2017-07-10 08:59:35 -04:00
Ludovic Marcotte 5b84ee0c09 (fix) wrong custom fields identifiers for 3 and 4 2017-07-06 08:56:30 -04:00
Ludovic Marcotte 2c9c1e0d01 (fix) support Squeeze + minor cleanups 2017-07-05 11:08:00 -04:00
Francis Lachapelle f6d79712e2 Update ChangeLog 2017-07-05 10:51:35 -04:00
Francis Lachapelle c0db64e0f2 Preparation for release 3.2.10 2017-07-05 10:49:34 -04:00
Francis Lachapelle 43d85f8bc4 Use xsltproc instead of fop to generate XSL-FO 2017-07-05 10:44:27 -04:00
Francis Lachapelle 5aa74ca0ad (js) Update CKEditor to version 4.7.1 2017-07-05 10:06:05 -04:00
InverseBot 5d98112a7a (js/css) Update generated files 2017-07-05 01:25:31 -04:00
Francis Lachapelle c48750c6f2 (js) Fix mail composition from mailto link 2017-07-04 17:23:00 -04:00
Ludovic Marcotte b7dac4db9f Updated NEWS 2017-07-04 13:20:02 -04:00
Ludovic Marcotte 579ab68e19 (fix) silence sogo-ealarms-notify verbose output (fixes #4170) 2017-07-04 13:15:29 -04:00
Ludovic Marcotte 0c82ad5944 Updated NEWS 2017-07-04 11:02:44 -04:00
Ludovic Marcotte 22c078ee76 (fix) enable S/MIME even when using GNU TLS (fixes #4201) 2017-07-04 11:00:06 -04:00
Francis Lachapelle 721428c88f (js) Create list from selected cards
Fixes #3561
2017-07-04 10:10:00 -04:00
Ludovic Marcotte 07fa202523 (fix) respect disabled state of sending rate-limiting (fixes #4198) 2017-07-04 09:58:20 -04:00
Ludovic Marcotte 919d1ef6be (fix) avoid advertising EAS 16 support until libwbxml is fixed 2017-07-04 09:26:08 -04:00
InverseBot 3927494393 (js/css) Update generated files 2017-07-04 01:24:12 -04:00
InverseBot 14b902241d (js/css) Update generated files 2017-06-30 01:28:54 -04:00
Ludovic Marcotte fa7aba89c2 (doc) improve iOS doc 2017-06-29 15:41:23 -04:00
Francis Lachapelle 7785c1c142 (css,js) Update md to v1.1.4-master-75237c6 2017-06-29 11:17:22 -04:00
Francis Lachapelle d9dafd3d14 (js) Don't explode card when no email defined 2017-06-29 10:49:15 -04:00
InverseBot df8c00089b (js/css) Update generated files 2017-06-29 01:29:10 -04:00
Francis Lachapelle 741e639960 (i18n) Update translations 2017-06-28 14:16:26 -04:00
Francis Lachapelle 9f96639e6f Ignore errors of nonexistent special mailboxes
Fixes #4177
2017-06-28 14:01:52 -04:00
Francis Lachapelle ee68cf6ed5 (js) Add missing ui-router map files
Fixes #4209
2017-06-28 12:06:05 -04:00
Francis Lachapelle 8662dd199d (js) Add missing timezone list in Preferences 2017-06-28 12:00:36 -04:00
Francis Lachapelle 2d1c2b2239 Update NEWS file 2017-06-28 11:01:21 -04:00
Francis Lachapelle 863510e707 (fix) Update settings of active user only
Fixes #3988
2017-06-28 10:57:18 -04:00
Francis Lachapelle 3ce28b7316 (js) Use more one-time bindings 2017-06-27 22:24:07 -04:00
InverseBot b0e0950d12 (js/css) Update generated files 2017-06-23 01:28:37 -04:00
Francis Lachapelle e8ec8180a8 (js) Use more one-time bindings in Calendar module 2017-06-22 11:56:16 -04:00
Francis Lachapelle 9bde9b66ef Improve identification of preferred elements
Fixes #799
2017-06-22 11:56:16 -04:00
Ludovic Marcotte 7f00afcef5 (fix) check cache before using it (fixes #3988) 2017-06-22 10:20:54 -04:00
InverseBot 362d6d521f (js/css) Update generated files 2017-06-21 01:27:31 -04:00
Francis Lachapelle e1bc458d46 (js) Don't save form when invalid
Fixes #3793
2017-06-20 15:25:07 -04:00
InverseBot ade945219f (js/css) Update generated files 2017-06-17 01:26:44 -04:00
Francis Lachapelle 6c654e0f90 (js) Fix validation in Sieve filter editor
Fixes #4200
2017-06-16 16:37:17 -04:00
Ludovic Marcotte ca43e7d9ca (fix) added doc to sogo-tool manage-eas + did cleanups (fixes #3967) 2017-06-16 13:25:15 -04:00
Ludovic Marcotte 0a155d6f67 (fix) missing import 2017-06-16 13:24:24 -04:00
InverseBot c9dded0947 (js/css) Update generated files 2017-06-16 01:30:58 -04:00
Francis Lachapelle d72c614d29 (js) Fix edition of mail tags 2017-06-15 16:04:47 -04:00
Ludovic Marcotte 157d3050bf Deleted old tests 2017-06-15 11:24:32 -04:00
Ludovic Marcotte 8a50ccdab4 Updated NEWS 2017-06-15 11:23:51 -04:00
Ludovic Marcotte 99fff30489 (fix) don't include task folders over EAS if we are hiding them (fixes #4164) 2017-06-15 11:21:41 -04:00
InverseBot ef122b0f39 (js/css) Update generated files 2017-06-15 01:28:00 -04:00
Francis Lachapelle b6b8f7a0fb Improve display of component comments, card notes 2017-06-14 20:41:18 -04:00
Francis Lachapelle 8701d2c26c (js) Remove inline user settings for Contacts 2017-06-14 20:41:18 -04:00
Francis Lachapelle 5080482507 (html) Remove useless space from card editor 2017-06-14 20:41:18 -04:00
Ludovic Marcotte 392cad1cbb Updated NEWS 2017-06-14 15:53:49 -04:00
Ludovic Marcotte 248cea87e8 (feat) initial pass at generalized stress tests 2017-06-14 14:41:01 -04:00
Francis Lachapelle 7464c2e680 (js) Support backspace AND delete keys 2017-06-14 13:38:40 -04:00
Francis Lachapelle 67b9ef0b8b (js) Fix mailbox deletion from the hot key 2017-06-14 13:24:08 -04:00
Ludovic Marcotte 9b2527ce6d (fix) provide mininum values for recurrences 2017-06-13 15:05:04 -04:00
InverseBot 67d4896bc7 (js/css) Update generated files 2017-06-10 02:08:54 -04:00
Ludovic Marcotte a86f8a8a0a (fix) email alarms are sent too many times (fixes #4100) 2017-06-09 15:17:32 -04:00
Ludovic Marcotte 5fd8c9d2d0 (doc) updates for MySQL's max_allowed_packet parameter (fixes #4119 and #4142) 2017-06-09 11:19:57 -04:00
Ludovic Marcotte aff5d53b1c (fix) improvements for Drafts handling 2017-06-09 10:01:11 -04:00
Francis Lachapelle b3f541b87e Sanitize whitelisted attributes of HTML tags 2017-06-05 15:14:48 -04:00
Francis Lachapelle 2604e2bf59 Sanity check when user's session has expired 2017-06-05 10:23:59 -04:00
InverseBot dc9eaa164d (js/css) Update generated files 2017-06-03 01:24:59 -04:00
Francis Lachapelle b8f54dd8e8 (css,js) Update md to v1.1.4-master-e1345ae 2017-06-02 14:20:40 -04:00
InverseBot 15ab809c38 (js/css) Update generated files 2017-06-02 02:16:11 -04:00
Ludovic Marcotte bb04f97570 Updated NEWS 2017-06-01 16:11:34 -04:00
Ludovic Marcotte 6f56522f89 (feat) first pas at EAS v16 support and save in drafts 2017-06-01 16:07:34 -04:00
Ludovic Marcotte 6e04a2d99c (feat) can now discard incoming mails during vacation 2017-06-01 14:49:09 -04:00
Francis Lachapelle e8e0df8b53 Expose user settings and defaults inline (cont'd) 2017-06-01 13:50:46 -04:00
Francis Lachapelle 72d2152b20 (i18n) Add missing strings in Contacts module 2017-06-01 13:49:00 -04:00
Francis Lachapelle 89bfa0c536 Expose user's settings and defaults inline
This improves performance by removing two AJAX calls and a lot of
JavaScript promises.
2017-06-01 13:48:45 -04:00
Francis Lachapelle 1fa056bb25 Update README for new Latvian translation 2017-06-01 13:48:44 -04:00
InverseBot a19d1573d3 (js/css) Update generated files 2017-06-01 01:25:44 -04:00
Francis Lachapelle c8e90b4abd (css) Improve sgImageGallery for small devices
Also include md-truncate directive from ng-material.
2017-05-31 09:40:22 -04:00
Francis Lachapelle e4d0ce6090 (i18n) Fix Lithuanian typo 2017-05-31 06:36:03 -04:00
Francis Lachapelle a33bd62343 Add Latvian (lv) translation (cont'd) 2017-05-31 06:36:03 -04:00
InverseBot 0738896540 (js/css) Update generated files 2017-05-31 00:27:22 -04:00
Francis Lachapelle 34a6a8960a Add Latvian (lv) translation 2017-05-30 16:19:44 -04:00
Francis Lachapelle 02684127dd Cleanup UI/WebServerResources/GNUmakefile 2017-05-30 14:56:35 -04:00
Ludovic Marcotte 6a8345c2c8 (fix) fixed typos in tools' help (fixes #4175) 2017-05-30 14:47:23 -04:00
Ludovic Marcotte 9dae52a719 (fix) sanity check when no defaults are found (fixes #4179) 2017-05-30 14:44:43 -04:00
Ludovic Marcotte f87797d61e Updated NEWS 2017-05-30 13:16:54 -04:00
Ludovic Marcotte 29dfc75fe9 (fix) remove any trailing cr (fixes #4172) 2017-05-30 13:15:04 -04:00
Francis Lachapelle af2507a689 Newly subscribed calendars are excluded from FB
Fixes #3354
2017-05-30 09:27:27 -04:00
Ludovic Marcotte 2b90ff70fa (feat) added custom fields support from Thunderbird's address book 2017-05-30 09:12:13 -04:00
InverseBot 43141a48cf (js/css) Update generated files 2017-05-30 01:27:54 -04:00
Francis Lachapelle 0355f66e96 (js) New ImageGallery ng service 2017-05-29 15:19:03 -04:00
Francis Lachapelle 3049af066b (css) Remove sgColorPicker in grid-list.scss 2017-05-29 14:54:54 -04:00
Francis Lachapelle b00fc756e6 (js) Cleanup dependencies of sgMailboxListItem 2017-05-29 14:51:51 -04:00
Francis Lachapelle 555b7303d1 (js) New images viewer for Mail module 2017-05-29 14:03:59 -04:00
Ludovic Marcotte 0a990ff66b (doc) replaced localhost with 127.0.0.1 to avoid IPv6 errors 2017-05-26 15:44:23 -04:00
Francis Lachapelle e591c9b3cf (doc) Fix rendering of Installation Guide 2017-05-25 14:41:05 -04:00
InverseBot acc6da4c15 (js/css) Update generated files 2017-05-25 01:24:14 -04:00
Francis Lachapelle 3f3f58dc9f (js) Fix card loading via router 2017-05-24 13:56:20 -04:00
Francis Lachapelle e30358aeaa (css) Fix responsive condition of login page 2017-05-24 11:55:24 -04:00
Francis Lachapelle 28e0db4adf Fix adding list members with multiple emails 2017-05-24 11:37:35 -04:00
Francis Lachapelle 92137de325 (doc) Fix IMAP server URL with TLS 2017-05-24 08:33:22 -04:00
InverseBot ad90d666ca (js/css) Update generated files 2017-05-24 01:22:20 -04:00
Francis Lachapelle 8678949c87 (js) Improve performance of color picker
Lower the number of watchers.
2017-05-23 15:43:47 -04:00
InverseBot 8f005b90f5 (js/css) Update generated files 2017-05-21 01:18:15 -04:00
InverseBot 49183bd1fb (js/css) Update generated files 2017-05-20 01:12:37 -04:00
Francis Lachapelle a26970b33b (js) Remove bindings on message flags in directive 2017-05-19 22:20:20 -04:00
Francis Lachapelle f2af5e9f87 Improve display of tasks status 2017-05-19 12:13:01 -04:00
Francis Lachapelle c24474b197 (js) Add missing injection in component editor 2017-05-19 08:56:10 -04:00
Francis Lachapelle ec02efe873 (js) No one-time bindings inside virtual-repeater 2017-05-19 07:53:05 -04:00
Francis Lachapelle 8dc2cfc2dc Silent sogo-tool expire-sessions cronjob
Fixes #4170
2017-05-19 07:46:18 -04:00
InverseBot ce5db84996 (js/css) Update generated files 2017-05-19 01:24:40 -04:00
Francis Lachapelle 41967d3eec Respect languages preferences on login page
Fixes #4169
2017-05-18 22:28:05 -04:00
Francis Lachapelle aee42f76f0 (js) Use one-time bindings in ACLs and sidenav 2017-05-18 15:40:11 -04:00
Francis Lachapelle 28ae2fd58a (js) Review Mail module to decrease watchers 2017-05-18 15:31:38 -04:00
Ludovic Marcotte 083be7e89f Fixed typo 2017-05-17 09:56:16 -04:00
Ludovic Marcotte 99510f4646 Updated NEWS 2017-05-17 09:47:53 -04:00
Ludovic Marcotte 334765c977 (feat) now able to subscribe/unsubscribe folders using sogo-tool 2017-05-17 09:44:34 -04:00
InverseBot 7207925362 (js/css) Update generated files 2017-05-13 01:24:30 -04:00
Francis Lachapelle c9b9150b96 Update ChangeLog 2017-05-09 09:06:22 -04:00
Francis Lachapelle 4d490d0f1e Preparation for release 3.2.9 2017-05-09 09:04:31 -04:00
Francis Lachapelle bc23130f9b (i18n) Update translations 2017-05-09 09:00:33 -04:00
InverseBot 28bc489c1a (js/css) Update generated files 2017-05-09 01:22:56 -04:00
Francis Lachapelle 650f337c41 (js/css) Update generated files 2017-05-08 16:08:22 -04:00
Francis Lachapelle 8de9b8ff53 Update time zones to version 2017b 2017-05-08 16:00:10 -04:00
Francis Lachapelle 8b812ba4f0 (js) Minor JavaScript code cleanup 2017-05-08 15:46:48 -04:00
Francis Lachapelle 836700fb7e (js) Improve CAS handling 2017-05-08 15:43:10 -04:00
Francis Lachapelle ba583f41b1 (i18n) Update translations 2017-05-08 15:06:31 -04:00
Francis Lachapelle 0e82550f6b Update SOGoParentFolder.h 2017-05-08 14:44:13 -04:00
Francis Lachapelle 0185ba9d46 Fix mail delegation of pristine user accounts
Fixes #4160
2017-05-08 11:23:32 -04:00
Ludovic Marcotte 9700b93ad1 Updated NEWS 2017-05-08 10:46:39 -04:00
Ludovic Marcotte 63cb80142b (fix) make sure to use crypt as the scheme for md5/sha256/sha512 (fixes #4137) 2017-05-08 10:44:12 -04:00
InverseBot c3ef225a02 (js/css) Update generated files 2017-05-08 01:23:36 -04:00
InverseBot b42876bb0a (js/css) Update generated files 2017-05-07 01:17:20 -04:00
InverseBot da4033eeab (js/css) Update generated files 2017-05-04 01:17:26 -04:00
Francis Lachapelle f1329a3d36 (i18n) Update German translation 2017-05-02 09:56:30 -04:00
Francis Lachapelle b46781c693 Silent sogo-ealarms-notify
Fixes #4157
2017-04-27 09:40:24 -04:00
Francis Lachapelle ef5728dcaf Properly honor "include in freebusy"
Fixes #3354
2017-04-27 09:38:07 -04:00
Francis Lachapelle 663a0b60dd (feat) Configurable Web animation level 2017-04-25 16:35:39 -04:00
Francis Lachapelle 59dbef5ee7 Avoid duplicated emails in LDAP-based addressbook
Fixes #4129
2017-04-25 14:49:29 -04:00
InverseBot 4caff58918 (js/css) Update generated files 2017-04-25 01:18:12 -04:00
Francis Lachapelle 634cbe3d1b (js) Support SOGoLDAPContactInfoAttrbute 2017-04-24 16:15:39 -04:00
Francis Lachapelle 3d0c958a19 (js) Keep form pristine when changing passwords
Fixes #4138
2017-04-24 12:08:15 -04:00
Francis Lachapelle da44afdcf5 (i18n) Update translations 2017-04-24 11:37:49 -04:00
InverseBot 11f847cdfb (js/css) Update generated files 2017-04-22 01:18:32 -04:00
Francis Lachapelle 5f71ee4d52 (doc) Typo 2017-04-21 16:02:10 -04:00
Francis Lachapelle 68eae92d2d (doc) Exclude GNUstep packages from EPEL 2017-04-21 15:32:33 -04:00
Ludovic Marcotte 9459185059 Updated NEWS 2017-04-21 15:31:26 -04:00
Ludovic Marcotte a9763e94a4 (feat) added photo support in GAL search ops 2017-04-21 15:29:34 -04:00
Ludovic Marcotte 5c573b9a76 (fix) small fixes over previous commit 2017-04-21 14:12:48 -04:00
Ludovic Marcotte 513d81eb59 (fix) LDIF to vCard conversion for non-handled multi-value attributes (fixes #4086) 2017-04-21 12:31:54 -04:00
Francis Lachapelle 2b4e357da6 (js) Improve handling of IMAP timeout handling
For external accounts only.
2017-04-21 11:58:52 -04:00
Ludovic Marcotte ab50a41a86 (fix) email reminders sent multiple times (fixes #4100) 2017-04-21 08:49:56 -04:00
Ludovic Marcotte 7582ec8462 Updated comment 2017-04-20 14:35:44 -04:00
Ludovic Marcotte dd6b77a25b Updated NEWS 2017-04-20 14:31:26 -04:00
Ludovic Marcotte 0091ff749a (fix) handle properly windows-1255 charset (fixes #4124) 2017-04-20 14:29:15 -04:00
InverseBot c09dff3fc8 (js/css) Update generated files 2017-04-13 01:24:28 -04:00
Ludovic Marcotte 8a59180c0e Updated NEWS 2017-04-12 16:37:14 -04:00
Ludovic Marcotte d87dc6cdf2 (fix) enhance display of all-day invitations (fixes #4145)
Conflicts:
	SoObjects/Appointments/SOGoAptMailNotification.m
2017-04-12 16:36:41 -04:00
Francis Lachapelle 0af81b0831 (email alarms) Fix recipient header encoding 2017-04-12 16:22:15 -04:00
Francis Lachapelle 6fd9927092 (js) Fix email reminder with attendees
Fixes #4115
2017-04-12 14:56:38 -04:00
Francis Lachapelle 8bcda19799 (web) Fix renaming a mailbox with special chars 2017-04-12 13:41:24 -04:00
Ludovic Marcotte 5570d28d12 Updated NEWS 2017-04-12 13:02:10 -04:00
Ludovic Marcotte b8369ddb37 (fix) don't send IMIP invitation request/update for ALL EAS clients (fixes #4022) 2017-04-12 13:01:01 -04:00
Ludovic Marcotte e1ea6392c2 (fix) set RSVP when sending events invite 2017-04-12 12:59:53 -04:00
Ludovic Marcotte 011e112a1a Updated NEWS 2017-04-12 09:01:32 -04:00
Ludovic Marcotte 7d396a51f5 (feat) email alarms now have pretty formatting (fixes #805) 2017-04-12 08:59:29 -04:00
InverseBot dbf5039011 (js/css) Update generated files 2017-04-12 01:20:37 -04:00
Francis Lachapelle 76e6c064f7 Improve IMAP error handling in Mailer module 2017-04-11 15:42:36 -04:00
Francis Lachapelle 04f930dba5 (js) Always show center list on small devices 2017-04-11 12:00:00 -04:00
Francis Lachapelle 08fcee67bd Improve IMAP error handling in Mailer module 2017-04-11 11:47:47 -04:00
Ludovic Marcotte cc9602fbc8 Updated NEWS 2017-04-11 10:15:58 -04:00
Ludovic Marcotte c92d489017 (fix) remove over EAS alarms if we don't want them (fixes #4059) 2017-04-11 10:13:56 -04:00
Ludovic Marcotte 4cf59cd92e Updated NEWS 2017-04-07 14:18:20 -04:00
Ludovic Marcotte c4ad338aed (fix) initialize variable to avoid strange nil-return value on invocation (fixes #4048) 2017-04-07 14:16:18 -04:00
Ludovic Marcotte c8708d9164 Updated NEWS 2017-04-07 13:45:07 -04:00
Ludovic Marcotte 9bf7247835 (fix) correctly set flags when ReplaceMime is set (fixes #4133) 2017-04-07 13:43:18 -04:00
Francis Lachapelle ed3f794226 Fix attachment path when inside multiple parts 2017-04-06 14:31:41 -04:00
Ludovic Marcotte b9f4947f8a (fix) check if found before changing location 2017-04-06 14:24:25 -04:00
Ludovic Marcotte f83d6a20a1 (fix) protect ourself from broken SOPE/SOGo installs (fixes #4117) 2017-04-06 11:02:59 -04:00
Francis Lachapelle 8ff189229b [web] Fix exception when partstate is not known 2017-04-05 16:22:28 -04:00
Francis Lachapelle 4c1de4cecc Update NEWS file 2017-04-05 14:00:02 -04:00
InverseBot a7254fe4dd (js/css) Update generated files 2017-04-04 01:25:28 -04:00
Ludovic Marcotte 308938dcfa Updated NEWS 2017-03-29 10:20:59 -04:00
Ludovic Marcotte c11d961bf3 (fix) avoid escaping values that are quoted (fixes #3296) 2017-03-29 10:18:38 -04:00
InverseBot 4e82820db7 (js/css) Update generated files 2017-03-25 01:31:35 -04:00
Ludovic Marcotte 26dac618d0 (fix) more fixes for #3905 2017-03-24 12:38:02 -04:00
Ludovic Marcotte f1cc36b533 (fix) more fixes for #3905 2017-03-24 12:37:55 -04:00
Francis Lachapelle cf07f5746c Update ChangeLog 2017-03-24 09:46:32 -04:00
Francis Lachapelle a328f022cb (css) Update default theme 2017-03-24 09:45:56 -04:00
Francis Lachapelle 46c7af5fdd (js/css) Update generated files 2017-03-24 09:43:51 -04:00
Francis Lachapelle 7065c4f765 Preparation for release 3.2.8 2017-03-24 09:42:33 -04:00
Francis Lachapelle 2c8d1d0a26 (i18n) Update translations 2017-03-24 09:32:46 -04:00
InverseBot dab48bfc60 (js/css) Update generated files 2017-03-24 01:24:52 -04:00
Francis Lachapelle b0cc012849 (css,js) Update md to v1.1.3-master-e3f9772 2017-03-23 16:11:32 -04:00
Francis Lachapelle 1d028e4cf5 Expose default value SOGoMailAddOutgoingAddresses
Fixes #4064
2017-03-23 15:42:05 -04:00
Francis Lachapelle 4dcc1af46a (js) Improve recurrence editor 2017-03-23 14:01:28 -04:00
Francis Lachapelle c57f42b44b (js) Fix possible undefined variable 2017-03-23 13:58:34 -04:00
Francis Lachapelle 736921bdf7 (js) Fix display of category colors of components 2017-03-23 13:55:14 -04:00
Francis Lachapelle 0cc7c6be3d (js) Hide Copy/Move menu options with a single AB 2017-03-23 13:07:07 -04:00
Francis Lachapelle b7bc59d599 Enable Save btn after deleting attribute from card
Fixes #4095
2017-03-23 12:48:17 -04:00
InverseBot 2f92484064 (js/css) Update generated files 2017-03-23 01:24:54 -04:00
Francis Lachapelle b463fd4eda (js) Drop sgTransformOnBlur directive
The md-chips component has now a functional "md-add-on-blur" functionality.

Fixes #3944
2017-03-22 15:35:05 -04:00
Francis Lachapelle 75aaef0f3d (js) Restrict special mailboxes to the top level
Fixes #6963
2017-03-22 14:53:07 -04:00
Francis Lachapelle e7a06c42a4 (js) Fix sanitisation of flags in Sieve filters
Fixes #4087
2017-03-22 13:26:43 -04:00
Francis Lachapelle 5ff8463fba (js) Split string when pasting multiple addresses
Fixes #4097
2017-03-22 11:58:05 -04:00
Gordon Messmer 400dd26b7d Set the HTTP_HOST environment variable to enable preservation of the client's base URL. 2017-03-17 12:08:54 -07:00
Francis Lachapelle bc8146ef5d Remove debugging output 2017-01-29 18:02:44 -05:00
Ludovic Marcotte b25480f228 Updated NEWS 2017-03-18 15:37:45 -04:00
Ludovic Marcotte 585cda36d1 (fix) fix opacity in freebusy over EAS 2017-03-18 15:34:56 -04:00
Ludovic Marcotte b6d9c3e8e0 (fix) remove old code conflicting with #3905 2017-03-15 10:39:22 -04:00
Ludovic Marcotte ce8f2e9481 (fix) fixed task sorting on multiple categories 2017-03-14 14:18:53 -04:00
InverseBot cb532de83a (js/css) Update generated files 2017-03-14 09:09:24 -04:00
Francis Lachapelle 1aebad854b (js) Add missing variable declaration 2017-03-10 15:05:46 -05:00
Francis Lachapelle 9f6bc8a749 (js) Fix freebusy coverage of newly created event 2017-03-10 14:50:27 -05:00
Francis Lachapelle d24ff75ecf (js) Fix button to remove an attendee 2017-03-10 14:49:32 -05:00
Francis Lachapelle f60ffa923e (js) Display the attendees editor automatically 2017-03-10 14:48:53 -05:00
Francis Lachapelle 19512a85d2 (html) Caption for freebusy data of attendees 2017-03-10 14:43:02 -05:00
Francis Lachapelle baa6d39e28 (css) Generated no-animation.css 2017-03-10 06:36:14 -05:00
Ludovic Marcotte 5d9673415a (fix) don't abort on unhandled requests 2017-03-09 13:58:05 -05:00
Francis Lachapelle 50f25b0597 (i18n) Update translations 2017-03-09 12:19:12 -05:00
Francis Lachapelle 0a0f8a8d89 (css) Custom CSS for IE 2017-03-09 12:16:51 -05:00
Francis Lachapelle 489e35158c (css) Restore lost .md-fab-overlap-bottom class 2017-03-09 09:13:03 -05:00
InverseBot 11d9df6e6a (js/css) Update generated files 2017-03-09 01:26:19 -05:00
Francis Lachapelle e5dc76cc19 (js) Check alarms only if Calendar is accessible
Fixes #4067
2017-03-08 16:15:15 -05:00
Francis Lachapelle ab7ec63f4b Fix typo in Scheduler
Fixes #4072
2017-03-08 16:05:03 -05:00
Francis Lachapelle 1964fdebcb (html) Improve display of vacation message in pref 2017-03-08 16:05:03 -05:00
InverseBot 5b6807b78c (js/css) Update generated files 2017-03-08 09:42:14 -05:00
Ludovic Marcotte 9603971c1f (fix) wrong var type declaration 2017-03-08 09:31:19 -05:00
Ludovic Marcotte 4ae8961947 (fix) handle when mail starts with Bcc header (fixes #4073) 2017-03-08 08:42:56 -05:00
InverseBot 0ffbc13376 (js/css) Update generated files 2017-03-08 01:57:09 -05:00
Francis Lachapelle a02fa44dc7 (js) Fix SCAYT automatic language selection 2017-03-07 14:23:42 -05:00
Francis Lachapelle 682f699e2f Fix Welsh's locale 2017-03-07 14:20:51 -05:00
Ludovic Marcotte f3b098da75 Updated NEWS 2017-03-07 10:48:20 -05:00
Ludovic Marcotte 6a963bf84b (fix) remove attendees that have the same identity of the organizer (fixes #3905) 2017-03-07 10:45:44 -05:00
Francis Lachapelle 270ff1bd29 (js) Fix saving draft outside Mail module
Fixes #4071
2017-03-07 10:26:10 -05:00
InverseBot 74c2926bca (js/css) Update generated files 2017-03-04 01:34:40 -05:00
Francis Lachapelle 75aa6e90a2 (js) Fix handling of attachments in mail editor
Fixes #4058, #4063
2017-03-03 15:36:52 -05:00
Francis Lachapelle 3c35c16bf3 (html) Display year in day and week views 2017-03-03 15:01:00 -05:00
Ludovic Marcotte e95e8e9eac Updated NEWS 2017-03-03 14:15:27 -05:00
Ludovic Marcotte 588ec2b005 (fix) fixed handling of exdates and proper intersection for fbinfo (fixes #4051) 2017-03-03 14:13:25 -05:00
Francis Lachapelle 0627c2f58b (html) Constrain reminder to a positive number 2017-03-03 12:06:33 -05:00
Francis Lachapelle f6ed816243 (html) Constrain reminder to a positive number 2017-03-03 12:05:34 -05:00
Francis Lachapelle 25430a8128 Fix handling of contact organizations
Fixes #4028
2017-03-03 10:35:50 -05:00
Ludovic Marcotte 79a0d5e133 (fix) handle broken CalDAV clients sending bogus SENT-BY (fixes #3992) 2017-03-03 08:47:59 -05:00
InverseBot 018b7b7ab9 (js/css) Update generated files 2017-03-03 01:24:59 -05:00
Francis Lachapelle c8539dffa1 (js) Limit http error interceptor to JSON request 2017-03-02 15:48:31 -05:00
InverseBot c995c6e9d7 (js/css) Update generated files 2017-03-02 01:27:34 -05:00
Francis Lachapelle 8322d318aa Expose default value of SOGoMailAutoSave
Fixes #4053
2017-03-01 15:14:09 -05:00
Ludovic Marcotte 4d88eab13b Updated NEWS 2017-03-01 11:36:15 -05:00
Francis Lachapelle a3d7ae3a6b (js) Improve CAS handling 2017-03-01 11:15:25 -05:00
Ludovic Marcotte a29ced853a (js/css) Update generated files 2017-03-01 11:00:17 -05:00
Ludovic Marcotte 5047aed6ed (fix) more CAS fixes 2017-03-01 10:51:01 -05:00
Ludovic Marcotte 3c46a6ef14 (js/css) Update generated files 2017-03-01 09:49:36 -05:00
Ludovic Marcotte af3a35169a (fix) first pass at CAS XHR issue 2017-03-01 09:37:37 -05:00
InverseBot 6b471994ef (js/css) Update generated files 2017-03-01 01:23:28 -05:00
Francis Lachapelle 23ff62a9e0 (js) Improve event editor
- fixed form validity check;
- fixed alarm restoration after a reset;
- fixed recurrence rules check.
2017-02-28 16:13:58 -05:00
Francis Lachapelle 2a820bd780 (css) Improve display of event editor 2017-02-28 08:36:27 -05:00
InverseBot 125178e526 (js/css) Update generated files 2017-02-28 01:23:07 -05:00
Francis Lachapelle e1979976a6 (js) Month day(s) of monthly repeat must be set 2017-02-27 16:04:49 -05:00
Francis Lachapelle d87cf6980a (css) Improve display of recurrence editor 2017-02-27 16:03:45 -05:00
Francis Lachapelle dfce966e79 (js) Calendar week days must be set to save prefs 2017-02-27 12:55:15 -05:00
Francis Lachapelle 4002650748 (js) Expose model validity in sg-toggle-grid 2017-02-27 10:48:40 -05:00
InverseBot 0fa8cbf9cb (js/css) Update generated files 2017-02-23 01:24:05 -05:00
Francis Lachapelle 7a4dbcb364 (js) Update children paths when renaming a mailbox
Fixes #4046
2017-02-22 23:07:26 -05:00
Ludovic Marcotte 784503bdbc (fix) minor fixes in tools 2017-02-22 11:00:01 -05:00
Ludovic Marcotte 91b32faac2 Updated NEWS 2017-02-21 10:14:58 -05:00
Ludovic Marcotte f24d9ae389 (fix) safety checks, fixed remove ALL and added add ALL 2017-02-21 10:12:55 -05:00
Ludovic Marcotte b501014935 (feat) new sogo-tool manage-acl feature to get/add/remove ACLs from GCS folders 2017-02-20 18:57:46 -05:00
Ludovic Marcotte cc52e82524 (feat) added delete capability to sogo-tool checkup 2017-02-20 13:37:23 -05:00
Ludovic Marcotte fe42180bc0 (fix) set the memcache retry timeout to 5 seconds 2017-02-20 10:35:08 -05:00
Ludovic Marcotte 7f67e90c53 (fix) enable tcp_nodelay for memcache 2017-02-20 10:34:54 -05:00
InverseBot bf001b1af6 (js/css) Update generated files 2017-02-20 01:22:37 -05:00
Francis Lachapelle 3c65973cd5 (css) Hide fab button when printing
Fixes #4038
2017-02-19 21:57:27 -05:00
Francis Lachapelle 48b2008da4 (js) Localize mailbox names everywhere
Fixes #4041
2017-02-19 21:13:44 -05:00
InverseBot fd13fd632c (js/css) Update generated files 2017-02-18 01:21:42 -05:00
Francis Lachapelle b1e8f30138 (js) Localized inbox label
Fixes #4040
2017-02-17 21:22:10 -05:00
Ludovic Marcotte fc68709956 Updated NEWS 2017-02-17 15:19:37 -05:00
Francis Lachapelle 06238a39b1 (js) Fix fcn call when removing contact category
Fixes #4039
2017-02-17 11:01:42 -05:00
Francis Lachapelle 9f84162c5d (css) Fix ACL editor in Admin module for Safari
Fixes #4036
2017-02-15 23:11:34 -05:00
InverseBot 6ffc9a3552 (js/css) Update generated files 2017-02-15 01:29:55 -05:00
1409 changed files with 81110 additions and 33201 deletions

No files matched your search

-2
View File
@@ -19,8 +19,6 @@ UI/WebServerResources/.bowerrc
UI/WebServerResources/.sass-cache/
UI/WebServerResources/bower_components/
UI/WebServerResources/css/
UI/WebServerResources/css/styles.css
UI/WebServerResources/css/styles.css.map
UI/WebServerResources/js/*.js
UI/WebServerResources/js/*.js.map
UI/WebServerResources/js/vendor/*.js
+44
View File
@@ -20,7 +20,9 @@ trans.hr_HR = UI/MailerUI/Croatian.lproj/Localizable.strings
trans.hu = UI/MailerUI/Hungarian.lproj/Localizable.strings
trans.is = UI/MailerUI/Icelandic.lproj/Localizable.strings
trans.it = UI/MailerUI/Italian.lproj/Localizable.strings
trans.ja = UI/MailerUI/Japanese.lproj/Localizable.strings
trans.lt = UI/MailerUI/Lithuanian.lproj/Localizable.strings
trans.lv = UI/MailerUI/Latvian.lproj/Localizable.strings
trans.mk_MK = UI/MailerUI/Macedonian.lproj/Localizable.strings
trans.nb_NO = UI/MailerUI/NorwegianBokmal.lproj/Localizable.strings
trans.nl = UI/MailerUI/Dutch.lproj/Localizable.strings
@@ -28,6 +30,7 @@ trans.nn_NO = UI/MailerUI/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/MailerUI/Polish.lproj/Localizable.strings
trans.pt = UI/MailerUI/Portuguese.lproj/Localizable.strings
trans.pt_BR = UI/MailerUI/BrazilianPortuguese.lproj/Localizable.strings
trans.ro_RO = UI/MailerUI/Romanian.lproj/Localizable.strings
trans.ru = UI/MailerUI/Russian.lproj/Localizable.strings
trans.sk = UI/MailerUI/Slovak.lproj/Localizable.strings
trans.sl_SI = UI/MailerUI/Slovenian.lproj/Localizable.strings
@@ -35,6 +38,7 @@ trans.sr = UI/MailerUI/Serbian.lproj/Localizable.strings
trans.sv = UI/MailerUI/Swedish.lproj/Localizable.strings
trans.tr_TR = UI/MailerUI/TurkishTurkey.lproj/Localizable.strings
trans.uk = UI/MailerUI/Ukrainian.lproj/Localizable.strings
trans.zh_CN = UI/MailerUI/ChineseChina.lproj/Localizable.strings
trans.zh_TW = UI/MailerUI/ChineseTaiwan.lproj/Localizable.strings
[sogo.ui-preferencesui]
@@ -56,7 +60,9 @@ trans.hr_HR = UI/PreferencesUI/Croatian.lproj/Localizable.strings
trans.hu = UI/PreferencesUI/Hungarian.lproj/Localizable.strings
trans.is = UI/PreferencesUI/Icelandic.lproj/Localizable.strings
trans.it = UI/PreferencesUI/Italian.lproj/Localizable.strings
trans.ja = UI/PreferencesUI/Japanese.lproj/Localizable.strings
trans.lt = UI/PreferencesUI/Lithuanian.lproj/Localizable.strings
trans.lv = UI/PreferencesUI/Latvian.lproj/Localizable.strings
trans.mk_MK = UI/PreferencesUI/Macedonian.lproj/Localizable.strings
trans.nb_NO = UI/PreferencesUI/NorwegianBokmal.lproj/Localizable.strings
trans.nl = UI/PreferencesUI/Dutch.lproj/Localizable.strings
@@ -64,6 +70,7 @@ trans.nn_NO = UI/PreferencesUI/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/PreferencesUI/Polish.lproj/Localizable.strings
trans.pt = UI/PreferencesUI/Portuguese.lproj/Localizable.strings
trans.pt_BR = UI/PreferencesUI/BrazilianPortuguese.lproj/Localizable.strings
trans.ro_RO = UI/PreferencesUI/Romanian.lproj/Localizable.strings
trans.ru = UI/PreferencesUI/Russian.lproj/Localizable.strings
trans.sk = UI/PreferencesUI/Slovak.lproj/Localizable.strings
trans.sl_SI = UI/PreferencesUI/Slovenian.lproj/Localizable.strings
@@ -71,6 +78,7 @@ trans.sr = UI/PreferencesUI/Serbian.lproj/Localizable.strings
trans.sv = UI/PreferencesUI/Swedish.lproj/Localizable.strings
trans.tr_TR = UI/PreferencesUI/TurkishTurkey.lproj/Localizable.strings
trans.uk = UI/PreferencesUI/Ukrainian.lproj/Localizable.strings
trans.zh_CN = UI/PreferencesUI/ChineseChina.lproj/Localizable.strings
trans.zh_TW = UI/PreferencesUI/ChineseTaiwan.lproj/Localizable.strings
[sogo.ui-scheduler]
@@ -92,7 +100,9 @@ trans.hr_HR = UI/Scheduler/Croatian.lproj/Localizable.strings
trans.hu = UI/Scheduler/Hungarian.lproj/Localizable.strings
trans.is = UI/Scheduler/Icelandic.lproj/Localizable.strings
trans.it = UI/Scheduler/Italian.lproj/Localizable.strings
trans.ja = UI/Scheduler/Japanese.lproj/Localizable.strings
trans.lt = UI/Scheduler/Lithuanian.lproj/Localizable.strings
trans.lv = UI/Scheduler/Latvian.lproj/Localizable.strings
trans.mk_MK = UI/Scheduler/Macedonian.lproj/Localizable.strings
trans.nb_NO = UI/Scheduler/NorwegianBokmal.lproj/Localizable.strings
trans.nl = UI/Scheduler/Dutch.lproj/Localizable.strings
@@ -100,6 +110,7 @@ trans.nn_NO = UI/Scheduler/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/Scheduler/Polish.lproj/Localizable.strings
trans.pt = UI/Scheduler/Portuguese.lproj/Localizable.strings
trans.pt_BR = UI/Scheduler/BrazilianPortuguese.lproj/Localizable.strings
trans.ro_RO = UI/Scheduler/Romanian.lproj/Localizable.strings
trans.ru = UI/Scheduler/Russian.lproj/Localizable.strings
trans.sk = UI/Scheduler/Slovak.lproj/Localizable.strings
trans.sl_SI = UI/Scheduler/Slovenian.lproj/Localizable.strings
@@ -107,6 +118,7 @@ trans.sr = UI/Scheduler/Serbian.lproj/Localizable.strings
trans.sv = UI/Scheduler/Swedish.lproj/Localizable.strings
trans.tr_TR = UI/Scheduler/TurkishTurkey.lproj/Localizable.strings
trans.uk = UI/Scheduler/Ukrainian.lproj/Localizable.strings
trans.zh_CN = UI/Scheduler/ChineseChina.lproj/Localizable.strings
trans.zh_TW = UI/Scheduler/ChineseTaiwan.lproj/Localizable.strings
[sogo.ui-contacts]
@@ -128,7 +140,9 @@ trans.hr_HR = UI/Contacts/Croatian.lproj/Localizable.strings
trans.hu = UI/Contacts/Hungarian.lproj/Localizable.strings
trans.is = UI/Contacts/Icelandic.lproj/Localizable.strings
trans.it = UI/Contacts/Italian.lproj/Localizable.strings
trans.ja = UI/Contacts/Japanese.lproj/Localizable.strings
trans.lt = UI/Contacts/Lithuanian.lproj/Localizable.strings
trans.lv = UI/Contacts/Latvian.lproj/Localizable.strings
trans.mk_MK = UI/Contacts/Macedonian.lproj/Localizable.strings
trans.nb_NO = UI/Contacts/NorwegianBokmal.lproj/Localizable.strings
trans.nl = UI/Contacts/Dutch.lproj/Localizable.strings
@@ -136,6 +150,7 @@ trans.nn_NO = UI/Contacts/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/Contacts/Polish.lproj/Localizable.strings
trans.pt = UI/Contacts/Portuguese.lproj/Localizable.strings
trans.pt_BR = UI/Contacts/BrazilianPortuguese.lproj/Localizable.strings
trans.ro_RO = UI/Contacts/Romanian.lproj/Localizable.strings
trans.ru = UI/Contacts/Russian.lproj/Localizable.strings
trans.sk = UI/Contacts/Slovak.lproj/Localizable.strings
trans.sl_SI = UI/Contacts/Slovenian.lproj/Localizable.strings
@@ -143,6 +158,7 @@ trans.sr = UI/Contacts/Serbian.lproj/Localizable.strings
trans.sv = UI/Contacts/Swedish.lproj/Localizable.strings
trans.tr_TR = UI/Contacts/TurkishTurkey.lproj/Localizable.strings
trans.uk = UI/Contacts/Ukrainian.lproj/Localizable.strings
trans.zh_CN = UI/Contacts/ChineseChina.lproj/Localizable.strings
trans.zh_TW = UI/Contacts/ChineseTaiwan.lproj/Localizable.strings
[sogo.ui-mainui]
@@ -164,7 +180,9 @@ trans.hr_HR = UI/MainUI/Croatian.lproj/Localizable.strings
trans.hu = UI/MainUI/Hungarian.lproj/Localizable.strings
trans.is = UI/MainUI/Icelandic.lproj/Localizable.strings
trans.it = UI/MainUI/Italian.lproj/Localizable.strings
trans.ja = UI/MainUI/Japanese.lproj/Localizable.strings
trans.lt = UI/MainUI/Lithuanian.lproj/Localizable.strings
trans.lv = UI/MainUI/Latvian.lproj/Localizable.strings
trans.mk_MK = UI/MainUI/Macedonian.lproj/Localizable.strings
trans.nb_NO = UI/MainUI/NorwegianBokmal.lproj/Localizable.strings
trans.nl = UI/MainUI/Dutch.lproj/Localizable.strings
@@ -172,6 +190,7 @@ trans.nn_NO = UI/MainUI/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/MainUI/Polish.lproj/Localizable.strings
trans.pt = UI/MainUI/Portuguese.lproj/Localizable.strings
trans.pt_BR = UI/MainUI/BrazilianPortuguese.lproj/Localizable.strings
trans.ro_RO = UI/MainUI/Romanian.lproj/Localizable.strings
trans.ru = UI/MainUI/Russian.lproj/Localizable.strings
trans.sk = UI/MainUI/Slovak.lproj/Localizable.strings
trans.sl_SI = UI/MainUI/Slovenian.lproj/Localizable.strings
@@ -179,6 +198,7 @@ trans.sr = UI/MainUI/Serbian.lproj/Localizable.strings
trans.sv = UI/MainUI/Swedish.lproj/Localizable.strings
trans.tr_TR = UI/MainUI/TurkishTurkey.lproj/Localizable.strings
trans.uk = UI/MainUI/Ukrainian.lproj/Localizable.strings
trans.zh_CN = UI/MainUI/ChineseChina.lproj/Localizable.strings
trans.zh_TW = UI/MainUI/ChineseTaiwan.lproj/Localizable.strings
[sogo.ui-common]
@@ -200,7 +220,9 @@ trans.hr_HR = UI/Common/Croatian.lproj/Localizable.strings
trans.hu = UI/Common/Hungarian.lproj/Localizable.strings
trans.is = UI/Common/Icelandic.lproj/Localizable.strings
trans.it = UI/Common/Italian.lproj/Localizable.strings
trans.ja = UI/Common/Japanese.lproj/Localizable.strings
trans.lt = UI/Common/Lithuanian.lproj/Localizable.strings
trans.lv = UI/Common/Latvian.lproj/Localizable.strings
trans.mk_MK = UI/Common/Macedonian.lproj/Localizable.strings
trans.nb_NO = UI/Common/NorwegianBokmal.lproj/Localizable.strings
trans.nl = UI/Common/Dutch.lproj/Localizable.strings
@@ -208,6 +230,7 @@ trans.nn_NO = UI/Common/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/Common/Polish.lproj/Localizable.strings
trans.pt = UI/Common/Portuguese.lproj/Localizable.strings
trans.pt_BR = UI/Common/BrazilianPortuguese.lproj/Localizable.strings
trans.ro_RO = UI/Common/Romanian.lproj/Localizable.strings
trans.ru = UI/Common/Russian.lproj/Localizable.strings
trans.sk = UI/Common/Slovak.lproj/Localizable.strings
trans.sl_SI = UI/Common/Slovenian.lproj/Localizable.strings
@@ -215,6 +238,7 @@ trans.sr = UI/Common/Serbian.lproj/Localizable.strings
trans.sv = UI/Common/Swedish.lproj/Localizable.strings
trans.tr_TR = UI/Common/TurkishTurkey.lproj/Localizable.strings
trans.uk = UI/Common/Ukrainian.lproj/Localizable.strings
trans.zh_CN = UI/Common/ChineseChina.lproj/Localizable.strings
trans.zh_TW = UI/Common/ChineseTaiwan.lproj/Localizable.strings
[sogo.ui-administrationui]
@@ -236,7 +260,9 @@ trans.hr_HR = UI/AdministrationUI/Croatian.lproj/Localizable.strings
trans.hu = UI/AdministrationUI/Hungarian.lproj/Localizable.strings
trans.is = UI/AdministrationUI/Icelandic.lproj/Localizable.strings
trans.it = UI/AdministrationUI/Italian.lproj/Localizable.strings
trans.ja = UI/AdministrationUI/Japanese.lproj/Localizable.strings
trans.lt = UI/AdministrationUI/Lithuanian.lproj/Localizable.strings
trans.lv = UI/AdministrationUI/Latvian.lproj/Localizable.strings
trans.mk_MK = UI/AdministrationUI/Macedonian.lproj/Localizable.strings
trans.nb_NO = UI/AdministrationUI/NorwegianBokmal.lproj/Localizable.strings
trans.nl = UI/AdministrationUI/Dutch.lproj/Localizable.strings
@@ -244,6 +270,7 @@ trans.nn_NO = UI/AdministrationUI/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/AdministrationUI/Polish.lproj/Localizable.strings
trans.pt = UI/AdministrationUI/Portuguese.lproj/Localizable.strings
trans.pt_BR = UI/AdministrationUI/BrazilianPortuguese.lproj/Localizable.strings
trans.ro_RO = UI/AdministrationUI/Romanian.lproj/Localizable.strings
trans.ru = UI/AdministrationUI/Russian.lproj/Localizable.strings
trans.sk = UI/AdministrationUI/Slovak.lproj/Localizable.strings
trans.sl_SI = UI/AdministrationUI/Slovenian.lproj/Localizable.strings
@@ -251,6 +278,7 @@ trans.sr = UI/AdministrationUI/Serbian.lproj/Localizable.strings
trans.sv = UI/AdministrationUI/Swedish.lproj/Localizable.strings
trans.tr_TR = UI/AdministrationUI/TurkishTurkey.lproj/Localizable.strings
trans.uk = UI/AdministrationUI/Ukrainian.lproj/Localizable.strings
trans.zh_CN = UI/AdministrationUI/ChineseChina.lproj/Localizable.strings
trans.zh_TW = UI/AdministrationUI/ChineseTaiwan.lproj/Localizable.strings
[sogo.soobjects-appointments]
@@ -272,7 +300,9 @@ trans.hr_HR = SoObjects/Appointments/Croatian.lproj/Localizable.strings
trans.hu = SoObjects/Appointments/Hungarian.lproj/Localizable.strings
trans.is = SoObjects/Appointments/Icelandic.lproj/Localizable.strings
trans.it = SoObjects/Appointments/Italian.lproj/Localizable.strings
trans.ja = SoObjects/Appointments/Japanese.lproj/Localizable.strings
trans.lt = SoObjects/Appointments/Lithuanian.lproj/Localizable.strings
trans.lv = SoObjects/Appointments/Latvian.lproj/Localizable.strings
trans.mk_MK = SoObjects/Appointments/Macedonian.lproj/Localizable.strings
trans.nb_NO = SoObjects/Appointments/NorwegianBokmal.lproj/Localizable.strings
trans.nl = SoObjects/Appointments/Dutch.lproj/Localizable.strings
@@ -280,6 +310,7 @@ trans.nn_NO = SoObjects/Appointments/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = SoObjects/Appointments/Polish.lproj/Localizable.strings
trans.pt = SoObjects/Appointments/Portuguese.lproj/Localizable.strings
trans.pt_BR = SoObjects/Appointments/BrazilianPortuguese.lproj/Localizable.strings
trans.ro_RO = SoObjects/Appointments/Romanian.lproj/Localizable.strings
trans.ru = SoObjects/Appointments/Russian.lproj/Localizable.strings
trans.sk = SoObjects/Appointments/Slovak.lproj/Localizable.strings
trans.sl_SI = SoObjects/Appointments/Slovenian.lproj/Localizable.strings
@@ -287,6 +318,7 @@ trans.sr = SoObjects/Appointments/Serbian.lproj/Localizable.strings
trans.sv = SoObjects/Appointments/Swedish.lproj/Localizable.strings
trans.tr_TR = SoObjects/Appointments/TurkishTurkey.lproj/Localizable.strings
trans.uk = SoObjects/Appointments/Ukrainian.lproj/Localizable.strings
trans.zh_CN = SoObjects/Appointments/ChineseChina.lproj/Localizable.strings
trans.zh_TW = SoObjects/Appointments/ChineseTaiwan.lproj/Localizable.strings
[sogo.soobjects-contacts]
@@ -308,7 +340,9 @@ trans.hr_HR = SoObjects/Contacts/Croatian.lproj/Localizable.strings
trans.hu = SoObjects/Contacts/Hungarian.lproj/Localizable.strings
trans.is = SoObjects/Contacts/Icelandic.lproj/Localizable.strings
trans.it = SoObjects/Contacts/Italian.lproj/Localizable.strings
trans.ja = SoObjects/Contacts/Japanese.lproj/Localizable.strings
trans.lt = SoObjects/Contacts/Lithuanian.lproj/Localizable.strings
trans.lv = SoObjects/Contacts/Latvian.lproj/Localizable.strings
trans.mk_MK = SoObjects/Contacts/Macedonian.lproj/Localizable.strings
trans.nb_NO = SoObjects/Contacts/NorwegianBokmal.lproj/Localizable.strings
trans.nl = SoObjects/Contacts/Dutch.lproj/Localizable.strings
@@ -316,6 +350,7 @@ trans.nn_NO = SoObjects/Contacts/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = SoObjects/Contacts/Polish.lproj/Localizable.strings
trans.pt = SoObjects/Contacts/Portuguese.lproj/Localizable.strings
trans.pt_BR = SoObjects/Contacts/BrazilianPortuguese.lproj/Localizable.strings
trans.ro_RO = SoObjects/Contacts/Romanian.lproj/Localizable.strings
trans.ru = SoObjects/Contacts/Russian.lproj/Localizable.strings
trans.sk = SoObjects/Contacts/Slovak.lproj/Localizable.strings
trans.sl_SI = SoObjects/Contacts/Slovenian.lproj/Localizable.strings
@@ -323,6 +358,7 @@ trans.sr = SoObjects/Contacts/Serbian.lproj/Localizable.strings
trans.sv = SoObjects/Contacts/Swedish.lproj/Localizable.strings
trans.tr_TR = SoObjects/Contacts/TurkishTurkey.lproj/Localizable.strings
trans.uk = SoObjects/Contacts/Ukrainian.lproj/Localizable.strings
trans.zh_CN = SoObjects/Contacts/ChineseChina.lproj/Localizable.strings
trans.zh_TW = SoObjects/Contacts/ChineseTaiwan.lproj/Localizable.strings
[sogo.soobjects-mailer]
@@ -344,7 +380,9 @@ trans.hr_HR = SoObjects/Mailer/Croatian.lproj/Localizable.strings
trans.hu = SoObjects/Mailer/Hungarian.lproj/Localizable.strings
trans.is = SoObjects/Mailer/Icelandic.lproj/Localizable.strings
trans.it = SoObjects/Mailer/Italian.lproj/Localizable.strings
trans.ja = SoObjects/Mailer/Japanese.lproj/Localizable.strings
trans.lt = SoObjects/Mailer/Lithuanian.lproj/Localizable.strings
trans.lv = SoObjects/Mailer/Latvian.lproj/Localizable.strings
trans.mk_MK = SoObjects/Mailer/Macedonian.lproj/Localizable.strings
trans.nb_NO = SoObjects/Mailer/NorwegianBokmal.lproj/Localizable.strings
trans.nl = SoObjects/Mailer/Dutch.lproj/Localizable.strings
@@ -352,6 +390,7 @@ trans.nn_NO = SoObjects/Mailer/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = SoObjects/Mailer/Polish.lproj/Localizable.strings
trans.pt = SoObjects/Mailer/Portuguese.lproj/Localizable.strings
trans.pt_BR = SoObjects/Mailer/BrazilianPortuguese.lproj/Localizable.strings
trans.ro_RO = SoObjects/Mailer/Romanian.lproj/Localizable.strings
trans.ru = SoObjects/Mailer/Russian.lproj/Localizable.strings
trans.sk = SoObjects/Mailer/Slovak.lproj/Localizable.strings
trans.sl_SI = SoObjects/Mailer/Slovenian.lproj/Localizable.strings
@@ -359,6 +398,7 @@ trans.sr = SoObjects/Mailer/Serbian.lproj/Localizable.strings
trans.sv = SoObjects/Mailer/Swedish.lproj/Localizable.strings
trans.tr_TR = SoObjects/Mailer/TurkishTurkey.lproj/Localizable.strings
trans.uk = SoObjects/Mailer/Ukrainian.lproj/Localizable.strings
trans.zh_CN = SoObjects/Mailer/ChineseChina.lproj/Localizable.strings
trans.zh_TW = SoObjects/Mailer/ChineseTaiwan.lproj/Localizable.strings
[sogo.ui-mailpartviewers]
@@ -380,7 +420,9 @@ trans.hr_HR = UI/MailPartViewers/Croatian.lproj/Localizable.strings
trans.hu = UI/MailPartViewers/Hungarian.lproj/Localizable.strings
trans.is = UI/MailPartViewers/Icelandic.lproj/Localizable.strings
trans.it = UI/MailPartViewers/Italian.lproj/Localizable.strings
trans.ja = UI/MailPartViewers/Japanese.lproj/Localizable.strings
trans.lt = UI/MailPartViewers/Lithuanian.lproj/Localizable.strings
trans.lv = UI/MailPartViewers/Latvian.lproj/Localizable.strings
trans.mk_MK = UI/MailPartViewers/Macedonian.lproj/Localizable.strings
trans.nb_NO = UI/MailPartViewers/NorwegianBokmal.lproj/Localizable.strings
trans.nl = UI/MailPartViewers/Dutch.lproj/Localizable.strings
@@ -388,6 +430,7 @@ trans.nn_NO = UI/MailPartViewers/NorwegianNynorsk.lproj/Localizable.strings
trans.pl = UI/MailPartViewers/Polish.lproj/Localizable.strings
trans.pt = UI/MailPartViewers/Portuguese.lproj/Localizable.strings
trans.pt_BR = UI/MailPartViewers/BrazilianPortuguese.lproj/Localizable.strings
trans.ro_RO = UI/MailPartViewers/Romanian.lproj/Localizable.strings
trans.ru = UI/MailPartViewers/Russian.lproj/Localizable.strings
trans.sk = UI/MailPartViewers/Slovak.lproj/Localizable.strings
trans.sl_SI = UI/MailPartViewers/Slovenian.lproj/Localizable.strings
@@ -395,4 +438,5 @@ trans.sr = UI/MailPartViewers/Serbian.lproj/Localizable.strings
trans.sv = UI/MailPartViewers/Swedish.lproj/Localizable.strings
trans.tr_TR = UI/MailPartViewers/TurkishTurkey.lproj/Localizable.strings
trans.uk = UI/MailPartViewers/Ukrainian.lproj/Localizable.strings
trans.zh_CN = UI/MailPartViewers/ChineseChina.lproj/Localizable.strings
trans.zh_TW = UI/MailPartViewers/ChineseTaiwan.lproj/Localizable.strings
+40 -2
View File
@@ -34,6 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#import <Foundation/NSString.h>
static NSArray *asElementArray = nil;
static NSArray *considerAsSameArray = nil;
@implementation NGDOMElement (ActiveSync)
@@ -101,7 +102,44 @@ static NSArray *asElementArray = nil;
int i, count;
if (!asElementArray)
asElementArray = [[NSArray alloc] initWithObjects: @"Attendee", @"Category", @"Exception", nil];
asElementArray = [[NSArray alloc] initWithObjects: @"Attendee", @"Category", @"Exception", @"Add", @"Delete", nil];
// FIXME
/* if the client sends
<attachments>
<add>
...
</add>
<add>
...
</add>
</attachments>
the result is a NSarray i.e. {add1; add2; ...}
if the client sends
<attachments>
<add>
...
</add>
<add>
...
</add>
<delete>
...
</delete>
<delete>
...
</delete>
</attachments>
the result is a NSDictionary ie. Add = { }; Delete = { }; the dictionary would contain only one entry for add
*/
if (!considerAsSameArray)
considerAsSameArray = [[NSArray alloc] initWithObjects: @"Add", @"Delete", nil];
data = [NSMutableDictionary dictionary];
@@ -151,7 +189,7 @@ static NSArray *asElementArray = nil;
if (!innerTag)
innerTag = [innerElement tagName];
if ([innerTag isEqualToString: [innerElement tagName]])
if ([innerTag isEqualToString: [innerElement tagName]] || [considerAsSameArray containsObject: innerTag])
{
if ([(id)innerElement isTextNode])
[innerElements addObject: [(NGDOMElement *)innerElement textValue]];
+159 -27
View File
@@ -53,9 +53,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#import <SOGo/SOGoCacheGCSObject.h>
#import <SOGo/SOGoPermissions.h>
#import <NGCards/iCalCalendar.h>
#import <Appointments/iCalEntityObject+SOGo.h>
#import <Appointments/SOGoAppointmentObject.h>
#import <Appointments/SOGoTaskObject.h>
#import <Appointments/SOGoAppointmentFolder.h>
#import <Contacts/SOGoContactGCSEntry.h>
@@ -149,7 +152,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
processIdentifierInCache = [[self globalMetadataForDevice] objectForKey: key];
// Don't update the cache if another request is processing the same collection.
// I case of a merged folder we have to check personal folder's lock.
// In case of a merged folder we have to check personal folder's lock.
a = [key componentsSeparatedByString: @"/"];
pkey = [NSString stringWithFormat: @"%@/personal", [a objectAtIndex:0]];
@@ -227,7 +230,26 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
return nameInCache;
}
- (void) _removeAllAlarmsFromCalendar: (iCalCalendar *) theCalendar
{
NSArray *allComponents;
iCalEntityObject *currentComponent;
NSUInteger count, max;
if (debugOn)
[self logWithFormat: @"EAS - Remove all alarms"];
allComponents = [theCalendar allObjects];
max = [allComponents count];
for (count = 0; count < max; count++)
{
currentComponent = [allComponents objectAtIndex: count];
if ([currentComponent isKindOfClass: [iCalEvent class]] ||
[currentComponent isKindOfClass: [iCalToDo class]])
[currentComponent removeAllAlarms];
}
}
//
// <?xml version="1.0"?>
@@ -289,8 +311,34 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
anAddition = [additions objectAtIndex: i];
is_new = YES;
clientId = [[(id)[anAddition getElementsByTagName: @"ClientId"] lastObject] textValue];
/*
FIXME
<Add>
<ClientId>338</ClientId>
<ApplicationData>
<To xmlns="Email:">&lt;foot@bar.com&gt;</To>
<Cc xmlns="Email:"/>
<Subject xmlns="Email:">test</Subject>
<Reply-To xmlns="Email:">foo@bar.com</Reply-To>
<Importance xmlns="Email:">1</Importance>
<Read xmlns="Email:">1</Read>
<Attachments xmlns="AirSyncBase:">
<Add>
<ClientId>152-ab557915-8451-49a7-a9c6-a9ac153021ad</ClientId>
-> lastObject returns the ClientId in Attachments element -> try with objectAtIndex: 0 -> is this correct?
*/
//clientId = [[(id)[anAddition getElementsByTagName: @"ClientId"] lastObject] textValue];
clientId = [[(id)[anAddition getElementsByTagName: @"ClientId"] objectAtIndex: 0] textValue];
allValues = [NSMutableDictionary dictionaryWithDictionary: [[(id)[anAddition getElementsByTagName: @"ApplicationData"] lastObject] applicationData]];
// FIXME: ignore the <Add> elements of Attachemnts - above (id)[theDocumentElement getElementsByTagName: @"Add"]; return any <Add> elements instead of only the direct childs of the <commands> element ..
if (![allValues count])
continue;
switch (theFolderType)
{
@@ -309,8 +357,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// the case, let's just update it. This can happen if for example, an iOS based device receives the
// invitation email and choses "Add to calendar" BEFORE actually syncing the calendar. That would
// create a duplicate on the server.
if ([allValues objectForKey: @"UID"])
serverId = [allValues objectForKey: @"UID"];
if ([allValues objectForKey: ([[context objectForKey: @"ASProtocolVersion"] floatValue] >= 16.0) ? @"ClientUid" : @"UID"])
serverId = [allValues objectForKey: ([[context objectForKey: @"ASProtocolVersion"] floatValue] >= 16.0) ? @"ClientUid" : @"UID"];
else
serverId = [theCollection globallyUniqueObjectId];
@@ -345,9 +393,49 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
case ActiveSyncMailFolder:
default:
{
// FIXME - what to do?
[self errorWithFormat: @"Fatal error occured - tried to call -processSyncAddCommand: ... on a mail folder. We abort."];
abort();
// Support Draft Mail/SMS to Exchange eMail sync.
NSString *serverId;
NSMutableString *s;
NSDictionary *result;
NSNumber *modseq;
serverId = nil;
s = [NSMutableString string];
sogoObject = [SOGoMailObject objectWithName: @"Mail" inContainer: theCollection];
serverId = [sogoObject storeMail: allValues inBuffer: s inContext: context];
if (serverId)
{
sogoObject = [theCollection lookupName: serverId inContext: context acquire: 0];
[sogoObject takeActiveSyncValues: allValues inContext: context];
// Everything is fine, lets generate our response
[theBuffer appendString: @"<Add>"];
[theBuffer appendFormat: @"<ClientId>%@</ClientId>", clientId];
[theBuffer appendFormat: @"<ServerId>%@</ServerId>", serverId];
[theBuffer appendFormat: @"<Status>%d</Status>", 1];
[theBuffer appendString: s];
[theBuffer appendString: @"</Add>"];
folderMetadata = [self _folderMetadataForKey: [self _getNameInCache: theCollection withType: theFolderType]];
syncCache = [folderMetadata objectForKey: @"SyncCache"];
result = [sogoObject fetchParts: [NSArray arrayWithObject: @"MODSEQ"]];
modseq = [[[result objectForKey: @"RawResponse"] objectForKey: @"fetch"] objectForKey: @"modseq"];
[syncCache setObject: [modseq stringValue] forKey: serverId];
[self _setFolderMetadata: folderMetadata forKey: [self _getNameInCache: theCollection withType: theFolderType]];
continue;
}
else
{
// FIXME - what to do?
[self errorWithFormat: @"Fatal error occured - tried to call -processSyncAddCommand: ... on a mail folder. We abort."];
abort();
}
}
}
@@ -624,6 +712,24 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
NSDictionary *result;
NSNumber *modseq;
// Process an update to a Draft Mail.
if ([allChanges objectForKey: @"Body"])
{
NSString *serverId;
NSMutableString *s;
serverId = nil;
s = [NSMutableString string];
serverId = [sogoObject storeMail: allChanges inBuffer: s inContext: context];
if (serverId)
{
// we delete the original email - next sync will update the client with the new mail
[sogoObject delete];
sogoObject = [theCollection lookupName: serverId inContext: context acquire: 0];
}
}
[sogoObject takeActiveSyncValues: allChanges inContext: context];
result = [sogoObject fetchParts: [NSArray arrayWithObject: @"MODSEQ"]];
@@ -638,7 +744,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
[theBuffer appendString: @"<Change>"];
[theBuffer appendFormat: @"<ServerId>%@</ServerId>", origServerId];
[theBuffer appendFormat: @"<Status>%d</Status>", 1];
// A body element is sent only for draft mails - status 8 will delete the mail on the client - the next sync update fetch the new mail
if ([allChanges objectForKey: @"Body"] && theFolderType == ActiveSyncMailFolder)
[theBuffer appendFormat: @"<Status>%d</Status>", 8];
else
[theBuffer appendFormat: @"<Status>%d</Status>", 1];
[theBuffer appendString: @"</Change>"];
}
}
@@ -760,7 +872,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// FIXME: handle errors here
if (deletesAsMoves && theFolderType == ActiveSyncMailFolder)
{
[(SOGoMailFolder *)[sogoObject container] deleteUIDs: [NSArray arrayWithObjects: serverId, nil] useTrashFolder: &useTrash inContext: context];
[(SOGoMailFolder *)[sogoObject container] deleteUIDs: [NSArray arrayWithObjects: serverId, nil]
useTrashFolder: &useTrash
inContext: context];
}
else if (theFolderType == ActiveSyncEventFolder || theFolderType == ActiveSyncTaskFolder || theFolderType == ActiveSyncContactFolder)
{
@@ -1221,6 +1335,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
d = [NSCalendarDate distantFuture];
[dateCache setObject: d forKey: uid];
if (!([theCollection showCalendarAlarms]))
[self _removeAllAlarmsFromCalendar: [componentObject parent]];
}
if (updated)
@@ -1334,7 +1451,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
}
}
allMessages = [theCollection syncTokenFieldsWithProperties: nil matchingSyncToken: theSyncKey fromDate: theFilterType initialLoad: initialLoadInProgress];
allMessages = [theCollection syncTokenFieldsWithProperties: nil
matchingSyncToken: theSyncKey
fromDate: theFilterType
initialLoad: initialLoadInProgress];
max = [allMessages count];
allCacheObjects = [NSMutableArray array];
@@ -1581,7 +1701,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
[s appendString: [mailObject activeSyncRepresentationInContext: context]];
[s appendString: @"</ApplicationData>"];
[s appendString: @"</Add>"];
[syncCache setObject: [aCacheObject sequence] forKey: [aCacheObject uid]];
[dateCache setObject: [NSCalendarDate date] forKey: [aCacheObject uid]];
@@ -2479,9 +2599,36 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// We enter our loop detection change
for (i = 0; i < (heartbeatInterval/internalInterval); i++)
{
// Terminate the process if we need to
if ([self easShouldTerminate])
break;
// We first check of any of the collections we want to sync are already
// in an other sync process. If that's the case, we do not do anything
// and we return immediately. So we'll let the other sync process terminate
for (j = 0; j < [allCollections count]; j++)
{
aCollection = [allCollections objectAtIndex: j];
globalMetadata = [self globalMetadataForDevice];
key = [NSString stringWithFormat: @"SyncRequest+%@", [[[(id)[aCollection getElementsByTagName: @"CollectionId"] lastObject] textValue] stringByUnescapingURL]];
if (!([[globalMetadata objectForKey: key] isEqual: processIdentifier]))
{
if (debugOn)
[self logWithFormat: @"EAS - Discard response %@", [self globalMetadataForDevice]];
[output appendString: @"<Status>13</Status>"];
[output appendString: @"</Sync>"];
d = [[output dataUsingEncoding: NSUTF8StringEncoding] xml2wbxml];
[theResponse setContent: d];
RELEASE(output);
return;
}
}
// We're good to go to sync the collections
s = [NSMutableString string];
for (j = 0; j < [allCollections count]; j++)
@@ -2493,21 +2640,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
changeDetected: &changeDetected
maxSyncResponseSize: maxSyncResponseSize];
// Don't return a response if another Sync is waiting.
globalMetadata = [self globalMetadataForDevice];
key = [NSString stringWithFormat: @"SyncRequest+%@", [[[(id)[aCollection getElementsByTagName: @"CollectionId"] lastObject] textValue] stringByUnescapingURL]];
if (!([[globalMetadata objectForKey: key] isEqual: processIdentifier]))
{
if (debugOn)
[self logWithFormat: @"EAS - Discard response %@", [self globalMetadataForDevice]];
[theResponse setStatus: 503];
RELEASE(output);
return;
}
if ((maxSyncResponseSize > 0 && [s length] >= maxSyncResponseSize))
break;
}
@@ -2540,7 +2672,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
int t;
[self logWithFormat: @"Sleeping %d seconds while detecting changes in Sync...", internalInterval-total_sleep];
[self logWithFormat: @"Sleeping %d seconds while detecting changes for user %@ in Sync...", internalInterval-total_sleep, [[context activeUser] login]];
for (t = 0; t < sleepInterval; t++)
{
+167 -62
View File
@@ -271,6 +271,39 @@ void handle_eas_terminate(int signum)
return theIdToTranslate;
}
//
//
//
- (SOGoAppointmentObject *) _eventObjectWithUID: (NSString *) uid
{
SOGoAppointmentFolder *folder;
SOGoAppointmentObject *eventObject;
NSArray *folders;
NSEnumerator *e;
NSString *cname;
eventObject = nil;
folders = [[[context activeUser] calendarsFolderInContext: context] subFolders];
e = [folders objectEnumerator];
while (eventObject == nil && (folder = [e nextObject]))
{
cname = [folder resourceNameForEventUID: uid];
if (cname)
{
eventObject = [folder lookupName: cname inContext: context
acquire: NO];
if ([eventObject isKindOfClass: [NSException class]])
eventObject = nil;
}
}
if (eventObject)
return eventObject;
else
return [NSException exceptionWithHTTPStatus:404 /* Not Found */];
}
//
//
//
@@ -741,14 +774,14 @@ void handle_eas_terminate(int signum)
{
[[theFolders objectAtIndex: i] setObject: theExistingParent forKey: @"parent"];
[[theFolders objectAtIndex: i] setObject:
[[[[theFolders objectAtIndex: i] objectForKey: @"path"] substringFromIndex: [theExistingParent length]+1]stringByReplacingOccurrencesOfString:@"/" withString:@"."]
[[[[[theFolders objectAtIndex: i] objectForKey: @"path"] substringFromIndex: [theExistingParent length]+1]stringByReplacingOccurrencesOfString:@"/" withString:@"."] stringByDecodingImap4FolderName]
forKey: @"name"];
}
else if (![[[theFolders objectAtIndex: i] objectForKey: @"type"] isEqualToString: @"otherUsers"] &&
![[[theFolders objectAtIndex: i] objectForKey: @"type"] isEqualToString: @"shared"])
{
[[theFolders objectAtIndex: i] setObject:
[[[theFolders objectAtIndex: i] objectForKey: @"path"] stringByReplacingOccurrencesOfString:@"/" withString:@"."]
[[[[theFolders objectAtIndex: i] objectForKey: @"path"] stringByReplacingOccurrencesOfString:@"/" withString:@"."] stringByDecodingImap4FolderName]
forKey: @"name"];
}
@@ -1151,38 +1184,45 @@ void handle_eas_terminate(int signum)
name = [NSString stringWithFormat: @"vtodo/%@", [[folders objectAtIndex:fi] nameInContainer]];
type = ([[[folders objectAtIndex:fi] nameInContainer] isEqualToString: personalFolderName] ? 7 : 15);
[commands appendFormat: @"<%@><ServerId>%@</ServerId><ParentId>%@</ParentId><DisplayName>%@</DisplayName><Type>%d</Type></%@>", operation,
[name stringByEscapingURL], @"0", [[[folders objectAtIndex:fi] displayName] activeSyncRepresentationInContext: context], type, operation];
command_count++;
key = [NSString stringWithFormat: @"%@+%@", [context objectForKey: @"DeviceId"], name];
o = [SOGoCacheGCSObject objectWithName: key inContainer: nil];
[o setObjectType: ActiveSyncFolderCacheObject];
[o setTableUrl: [self folderTableURL]];
[o reloadIfNeeded];
[[o properties ] setObject: [[folders objectAtIndex:fi] displayName] forKey: @"displayName"];
if ([operation isEqualToString: @"Add"])
// We always sync the "Default Tasks folder" (7). For "User-created Tasks folder" (15), we check if we include it in
// the sync process by checking if "Show tasks" is enabled. If not, we skip the folder entirely.
if (type == 7 ||
(type == 15 && [[folders objectAtIndex: fi] showCalendarTasks]))
{
// clean cache content to avoid stale data
[[o properties] removeObjectForKey: @"SyncKey"];
[[o properties] removeObjectForKey: @"SyncCache"];
[[o properties] removeObjectForKey: @"DateCache"];
[[o properties] removeObjectForKey: @"UidCache"];
[[o properties] removeObjectForKey: @"MoreAvailable"];
[[o properties] removeObjectForKey: @"BodyPreferenceType"];
[[o properties] removeObjectForKey: @"SupportedElements"];
[[o properties] removeObjectForKey: @"SuccessfulMoveItemsOps"];
[[o properties] removeObjectForKey: @"InitialLoadSequence"];
[[o properties] removeObjectForKey: @"FirstIdInCache"];
[[o properties] removeObjectForKey: @"LastIdInCache"];
[[o properties] removeObjectForKey: @"MergedFoldersSyncKeys"];
[[o properties] removeObjectForKey: @"MergedFolder"];
[[o properties] removeObjectForKey: @"CleanoutDate"];
}
[commands appendFormat: @"<%@><ServerId>%@</ServerId><ParentId>%@</ParentId><DisplayName>%@</DisplayName><Type>%d</Type></%@>", operation,
[name stringByEscapingURL], @"0", [[[folders objectAtIndex:fi] displayName] activeSyncRepresentationInContext: context], type, operation];
[o save];
command_count++;
key = [NSString stringWithFormat: @"%@+%@", [context objectForKey: @"DeviceId"], name];
o = [SOGoCacheGCSObject objectWithName: key inContainer: nil];
[o setObjectType: ActiveSyncFolderCacheObject];
[o setTableUrl: [self folderTableURL]];
[o reloadIfNeeded];
[[o properties ] setObject: [[folders objectAtIndex:fi] displayName] forKey: @"displayName"];
if ([operation isEqualToString: @"Add"])
{
// clean cache content to avoid stale data
[[o properties] removeObjectForKey: @"SyncKey"];
[[o properties] removeObjectForKey: @"SyncCache"];
[[o properties] removeObjectForKey: @"DateCache"];
[[o properties] removeObjectForKey: @"UidCache"];
[[o properties] removeObjectForKey: @"MoreAvailable"];
[[o properties] removeObjectForKey: @"BodyPreferenceType"];
[[o properties] removeObjectForKey: @"SupportedElements"];
[[o properties] removeObjectForKey: @"SuccessfulMoveItemsOps"];
[[o properties] removeObjectForKey: @"InitialLoadSequence"];
[[o properties] removeObjectForKey: @"FirstIdInCache"];
[[o properties] removeObjectForKey: @"LastIdInCache"];
[[o properties] removeObjectForKey: @"MergedFoldersSyncKeys"];
[[o properties] removeObjectForKey: @"MergedFolder"];
[[o properties] removeObjectForKey: @"CleanoutDate"];
}
[o save];
}
}
else if ([[folders objectAtIndex:fi] isKindOfClass: [SOGoContactGCSFolder class]])
{
@@ -1215,8 +1255,8 @@ void handle_eas_terminate(int signum)
[o save];
}
}
}
} // if (operation)
} // for (fi = 0; fi <= count ; fi++)
// set a new syncKey if there are folder changes
@@ -1815,6 +1855,9 @@ void handle_eas_terminate(int signum)
inContext: context
acquire: NO];
if ([appointmentObject isKindOfClass: [NSException class]])
appointmentObject = [self _eventObjectWithUID:[event uid]];
// Create the appointment if it is not added to calendar yet
if ([appointmentObject isKindOfClass: [NSException class]])
{
@@ -2383,6 +2426,11 @@ void handle_eas_terminate(int signum)
realCollectionId = [collectionId realCollectionIdWithFolderType: &folderType];
realCollectionId = [self globallyUniqueIDToIMAPFolderName: realCollectionId type: folderType];
// We avoid loading the cache metadata if we can't get the real connection. This can happen
// for example if the IMAP server is down. We just skip the folder for now.
if (!realCollectionId)
continue;
if (folderType == ActiveSyncMailFolder)
folderMetadata = [self _folderMetadataForKey: [NSString stringWithFormat: @"folder%@", [[collectionId stringByUnescapingURL] substringFromIndex:5]]];
else
@@ -2432,7 +2480,7 @@ void handle_eas_terminate(int signum)
{
int t;
[self logWithFormat: @"Sleeping %d seconds while detecting changes in Ping...", internalInterval-total_sleep];
[self logWithFormat: @"Sleeping %d seconds while detecting changes for user %@ in Ping...", internalInterval-total_sleep, [[context activeUser] login]];
for (t = 0; t < sleepInterval; t++)
{
@@ -2759,7 +2807,7 @@ void handle_eas_terminate(int signum)
inResponse: (WOResponse *) theResponse
{
SOGoContactSourceFolder *currentFolder;
NSArray *allKeys, *allContacts, *mails;
NSArray *allKeys, *allContacts, *mails, *a;
NSDictionary *systemSources, *contact;
SOGoContactFolders *contactFolders;
NSString *current_mail, *query;
@@ -2769,7 +2817,10 @@ void handle_eas_terminate(int signum)
NSData *d;
id o;
int i, j, total;
int i, j, t, v, total, minResult, maxResult, maxSize, maxPictures;
BOOL withPhoto;
withPhoto = NO;
query = [[(id)[theDocumentElement getElementsByTagName: @"Query"] lastObject] textValue];
@@ -2778,6 +2829,33 @@ void handle_eas_terminate(int signum)
systemSources = [contactFolders systemSources];
allKeys = [systemSources allKeys];
// We check for the maximum number of results to return.
a = [[[(id)[theDocumentElement getElementsByTagName: @"Range"] lastObject] textValue] componentsSeparatedByString: @"-"];
minResult = [[a objectAtIndex: 0] intValue];
maxResult = [[a objectAtIndex: 1] intValue];
if (maxResult == 0)
maxResult = 99;
if ((o = [(id)[[(id)[theDocumentElement getElementsByTagName: @"Options"] lastObject] getElementsByTagName: @"Picture"] lastObject]))
{
withPhoto = YES;
// We check for a MaxSize, default to 102400.
maxSize = [[[(id)[o getElementsByTagName: @"MaxSize"] lastObject] textValue] intValue];
// We check if we must overwrite the maxSize with a system preference. This can be useful
// if we don't want to have pictures in the response.
if ((v = [[SOGoSystemDefaults sharedSystemDefaults] maximumPictureSize]))
maxSize = v;
// We check for a MaxPictures, default to 99.
maxPictures = [[[(id)[o getElementsByTagName: @"MaxPictures"] lastObject] textValue] intValue];
if (maxPictures == 0)
maxPictures = 99;
}
s = [NSMutableString string];
[s appendString: @"<?xml version=\"1.0\" encoding=\"utf-8\"?>"];
@@ -2794,12 +2872,12 @@ void handle_eas_terminate(int signum)
{
currentFolder = [systemSources objectForKey: [allKeys objectAtIndex: i]];
allContacts = [currentFolder lookupContactsWithFilter: query
onCriteria: @"name_or_address"
onCriteria: nil
sortBy: @"c_cn"
ordering: NSOrderedAscending
inDomain: [[context activeUser] domain]];
for (j = 0; j < [allContacts count]; j++)
for (j = minResult; (j < [allContacts count] && j < maxResult) ; j++)
{
contact = [allContacts objectAtIndex: j];
@@ -2817,9 +2895,9 @@ void handle_eas_terminate(int signum)
else
mails = [NSArray arrayWithObjects: o ? o : @"", nil];
for (total = 0; total < [mails count]; total++)
for (t = 0; t < [mails count]; t++)
{
current_mail = [mails objectAtIndex: total];
current_mail = [mails objectAtIndex: t];
[s appendString: @"<Result xmlns=\"Search:\">"];
[s appendString: @"<Properties>"];
@@ -2837,7 +2915,7 @@ void handle_eas_terminate(int signum)
[s appendFormat: @"<LastName xmlns=\"Gal:\">%@</LastName>", [o activeSyncRepresentationInContext: context]];
if ([current_mail length] > 0)
[s appendFormat: @"<EmailAddress xmlns=\"Gal:\">%@</EmailAddress>", current_mail];
[s appendFormat: @"<EmailAddress xmlns=\"Gal:\">%@</EmailAddress>", [current_mail activeSyncRepresentationInContext: context]];
if ((o = [contact objectForKey: @"telephonenumber"]))
[s appendFormat: @"<Phone xmlns=\"Gal:\">%@</Phone>", [o activeSyncRepresentationInContext: context]];
@@ -2850,9 +2928,27 @@ void handle_eas_terminate(int signum)
if ((o = [contact objectForKey: @"o"]))
[s appendFormat: @"<Company xmlns=\"Gal:\">%@</Company>", [o activeSyncRepresentationInContext: context]];
if ([[context objectForKey: @"ASProtocolVersion"] floatValue] >= 14.1 && withPhoto)
{
o = [contact objectForKey: @"photo"];
if (o && [o length] <= maxSize && total < maxPictures)
{
[s appendString: @"<Picture xmlns=\"Gal:\"><Status>1</Status><Data>"];
[s appendString: [o activeSyncRepresentationInContext: context]];
[s appendString: @"</Data></Picture>"];
}
else if (!o)
[s appendString: @"<Picture xmlns=\"Gal:\"><Status>173</Status></Picture>"];
else if ([o length] > maxSize)
[s appendString: @"<Picture xmlns=\"Gal:\"><Status>174</Status></Picture>"];
else if (total >= maxPictures)
[s appendString: @"<Picture xmlns=\"Gal:\"><Status>175</Status></Picture>"];
}
[s appendString: @"</Properties>"];
[s appendString: @"</Result>"];
total++;
}
}
}
@@ -2945,7 +3041,7 @@ void handle_eas_terminate(int signum)
- (void) processSearchMailbox: (id <DOMElement>) theDocumentElement
inResponse: (WOResponse *) theResponse
{
NSString *folderId, *realCollectionId, *itemId;
NSString *folderId, *realCollectionId, *itemId, *bodyPreferenceType, *mimeSupport;
NSMutableArray *folderIdentifiers;
SOGoMailAccounts *accountsFolder;
SOGoMailAccount *accountFolder;
@@ -2969,6 +3065,13 @@ void handle_eas_terminate(int signum)
return;
}
bodyPreferenceType = [[(id)[[(id)[theDocumentElement getElementsByTagName: @"BodyPreference"] lastObject] getElementsByTagName: @"Type"] lastObject] textValue];
[context setObject: bodyPreferenceType forKey: @"BodyPreferenceType"];
mimeSupport = [[(id)[theDocumentElement getElementsByTagName: @"MIMESupport"] lastObject] textValue];
[context setObject: mimeSupport forKey: @"MIMESupport"];
[context setObject: @"8" forKey: @"MIMETruncation"];
// FIXME: support more than one CollectionId tag + DeepTraversal
folderId = [[(id)[[(id)[theDocumentElement getElementsByTagName: @"Query"] lastObject] getElementsByTagName: @"CollectionId"] lastObject] textValue];
folderIdentifiers = [NSMutableArray array];
@@ -3541,10 +3644,14 @@ void handle_eas_terminate(int signum)
{
NSString *folderId, *itemId, *realCollectionId;
SOGoMicrosoftActiveSyncFolderType folderType;
SOGoMailAccounts *accountsFolder;
SOGoMailFolder *currentFolder;
SOGoUserFolder *userFolder;
SOGoMailObject *mailObject;
SOGoUserDefaults *ud;
BOOL htmlComposition, isHTML;
id value;
id value, currentCollection;
isHTML = NO;
ud = [[context activeUser] userDefaults];
@@ -3570,23 +3677,31 @@ void handle_eas_terminate(int signum)
value = [theDocumentElement getElementsByTagName: @"ReplaceMime"];
// We fetch the mail object from the server
userFolder = [[context activeUser] homeFolderInContext: context];
accountsFolder = [userFolder lookupName: @"Mail" inContext: context acquire: NO];
currentFolder = [accountsFolder lookupName: @"0" inContext: context acquire: NO];
currentCollection = [currentFolder lookupName: [NSString stringWithFormat: @"folder%@", realCollectionId]
inContext: context
acquire: NO];
mailObject = [currentCollection lookupName: itemId inContext: context acquire: NO];
// ReplaceMime IS specified so we must NOT use the server copy
// but rather take the data as-is from the client.
if ([value count])
{
[self processSendMail: theDocumentElement
inResponse: theResponse];
[self processSendMail: theDocumentElement inResponse: theResponse];
if (!isSmartForward)
[mailObject addFlags: @"Answered"];
else
[mailObject addFlags: @"$Forwarded"];
return;
}
if (folderType == ActiveSyncMailFolder)
{
SOGoMailAccounts *accountsFolder;
SOGoMailFolder *currentFolder;
SOGoUserFolder *userFolder;
SOGoMailObject *mailObject;
id currentCollection;
NGMimeMessage *messageFromSmartForward, *messageToSend;
NGMimeMessageParser *parser;
NSData *data;
@@ -3605,16 +3720,6 @@ void handle_eas_terminate(int signum)
int a;
userFolder = [[context activeUser] homeFolderInContext: context];
accountsFolder = [userFolder lookupName: @"Mail" inContext: context acquire: NO];
currentFolder = [accountsFolder lookupName: @"0" inContext: context acquire: NO];
currentCollection = [currentFolder lookupName: [NSString stringWithFormat: @"folder%@", realCollectionId]
inContext: context
acquire: NO];
mailObject = [currentCollection lookupName: itemId inContext: context acquire: NO];
parser = [[NGMimeMessageParser alloc] init];
data = [[[[(id)[theDocumentElement getElementsByTagName: @"MIME"] lastObject] textValue] stringByDecodingBase64] dataUsingEncoding: NSUTF8StringEncoding];
messageFromSmartForward = [parser parsePartFromData: data];
+3
View File
@@ -42,6 +42,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- (NSString *) activeSyncRepresentationInContext: (WOContext *) context;
- (void) takeActiveSyncValues: (NSDictionary *) theValues
inContext: (WOContext *) context;
- (NSString *) storeMail: (NSDictionary *) theValues
inBuffer: (NSMutableString *) theBuffer
inContext: (WOContext *) _context;
@end
+253 -1
View File
@@ -34,6 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#import <Foundation/NSException.h>
#import <Foundation/NSString.h>
#import <Foundation/NSCharacterSet.h>
#import <Foundation/NSTimeZone.h>
#import <NGCards/iCalCalendar.h>
#import <NGCards/iCalDateTime.h>
@@ -44,9 +45,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#import <NGExtensions/NSString+misc.h>
#import <NGExtensions/NSString+Encoding.h>
#import <NGExtensions/NGHashMap.h>
#import <NGImap4/NGImap4Envelope.h>
#import <NGImap4/NGImap4EnvelopeAddress.h>
#import <NGImap4/NSString+Imap4.h>
#import <NGImap4/NGImap4Connection.h>
#import <NGImap4/NGImap4Client.h>
#import <NGObjWeb/WOContext+SoObjects.h>
#import <NGObjWeb/WOApplication.h>
#import <NGObjWeb/WORequest.h>
@@ -60,6 +64,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#import <NGMail/NGMimeMessageGenerator.h>
#import <SOGo/SOGoUserDefaults.h>
#import <SOGo/SOGoUserFolder.h>
#import <SOGo/NSArray+Utilities.h>
#include "iCalTimeZone+ActiveSync.h"
#include "NSData+ActiveSync.h"
@@ -71,6 +77,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <Mailer/SOGoMailBodyPart.h>
#include <Mailer/NSString+Mail.h>
#import <Mailer/SOGoMailLabel.h>
#import <Mailer/SOGoMailFolder.h>
#import <Mailer/SOGoMailObject.h>
#import <Mailer/SOGoMailAccount.h>
#import <Mailer/SOGoMailAccounts.h>
#include <SOGo/SOGoUser.h>
#include <SOGo/NSString+Utilities.h>
@@ -972,7 +984,12 @@ struct GlobalObjectId {
// Location
if ([[event location] length])
[s appendFormat: @"<Location xmlns=\"Email:\">%@</Location>", [[event location] activeSyncRepresentationInContext: context]];
{
if ([[context objectForKey: @"ASProtocolVersion"] floatValue] >= 16.0)
[s appendFormat: @"<Location xmlns=\"AirSyncBase:\"><DisplayName>%@</DisplayName></Location>", [[event location] activeSyncRepresentationInContext: context]];
else
[s appendFormat: @"<Location xmlns=\"Email:\">%@</Location>", [[event location] activeSyncRepresentationInContext: context]];
}
[s appendFormat: @"<Organizer xmlns=\"Email:\">%@</Organizer>", [[[event organizer] mailAddress] activeSyncRepresentationInContext: context]];
@@ -1432,4 +1449,239 @@ struct GlobalObjectId {
}
}
- (NSString *) storeMail: (NSDictionary *) theValues
inBuffer: (NSMutableString *) theBuffer
inContext: (WOContext *) _context
{
NSString *dateReceived, *folder, *s, *serverId, *messageId;
NGMimeMessageGenerator *generator;
NGMimeMessage *draftMessage;
NGMimeBodyPart *bodyPart;
NGMimeMultipartBody *body;
NSDictionary *identity;
NGMutableHashMap *map;
NGImap4Client *client;
NSData *message_data;
NSArray *attachmentKeys;
id o, a, result, attachments;
int bodyType, i;
identity = [[context activeUser] primaryIdentity];
message_data = nil;
bodyType = 1;
if ((o = [[theValues objectForKey: @"Body"] objectForKey: @"Type"]))
bodyType = [o intValue];
if (bodyType == 4)
{
s = [[theValues objectForKey: @"Body"] objectForKey: @"Data"];
message_data = [s dataUsingEncoding: NSUTF8StringEncoding];
}
if (bodyType == 1 || bodyType == 2)
{
map = [[[NGMutableHashMap alloc] initWithCapacity: 1] autorelease];
[map setObject: [NSString stringWithFormat: @"%@ <%@>", [identity objectForKey: @"fullName"], [identity objectForKey: @"email"]] forKey: @"from"];
if ((o = [theValues objectForKey: @"To"]))
[map setObject: o forKey: @"to"];
if ((o = [theValues objectForKey: @"Cc"]))
[map setObject: o forKey: @"cc"];
if ((o = [theValues objectForKey: @"Bcc"]))
[map setObject: o forKey: @"bcc"];
if ((o = [theValues objectForKey: @"Reply-To"]))
[map setObject: o forKey: @"Reply-To"];
if ((o = [theValues objectForKey: @"Subject"]))
[map setObject: o forKey: @"subject"];
o = [[theValues objectForKey: @"DateReceived"] calendarDate];
if (!o)
o = [NSCalendarDate date];
#if GNUSTEP_BASE_MINOR_VERSION < 21
dateReceived = [o descriptionWithCalendarFormat: @"%a, %d %b %Y %H:%M:%S %z"
timeZone: [NSTimeZone timeZoneWithName: @"GMT"]
locale: nil];
#else
dateReceived = [o descriptionWithCalendarFormat: @"%a, %d %b %Y %H:%M:%S %z"
timeZone: [NSTimeZone timeZoneWithName: @"GMT"]
locale: [NSDictionary dictionaryWithObjectsAndKeys:
[NSArray arrayWithObjects: @"Jan", @"Feb", @"Mar", @"Apr",
@"May", @"Jun", @"Jul", @"Aug",
@"Sep", @"Oct", @"Nov", @"Dec", nil],
@"NSShortMonthNameArray",
[NSArray arrayWithObjects: @"Sun", @"Mon", @"Tue", @"Wed", @"Thu",
@"Fri", @"Sat", nil],
@"NSShortWeekDayNameArray",
nil]];
#endif
[map setObject: dateReceived forKey: @"date"];
messageId = [NSString generateMessageID];
[map setObject: messageId forKey: @"message-id"];
attachmentKeys = [self fetchFileAttachmentKeys];
if ((attachments = [theValues objectForKey: @"Attachments"]) || [attachmentKeys count])
{
[map setObject: @"multipart/mixed" forKey: @"content-type"];
draftMessage = [[[NGMimeMessage alloc] initWithHeader: map] autorelease];
body = [[[NGMimeMultipartBody alloc] initWithPart: draftMessage] autorelease];
map = [[[NGMutableHashMap alloc] initWithCapacity: 1] autorelease];
[map setObject: (bodyType == 1 ? @"text/plain; charset=utf-8" : @"text/html; charset=utf-8")
forKey: @"content-type"];
[map setObject: @"quoted-printable" forKey: @"content-transfer-encoding"];
bodyPart = [[[NGMimeBodyPart alloc] initWithHeader:map] autorelease];
[bodyPart setBody: [[NSString stringWithFormat: @"%@", [[theValues objectForKey: @"Body"] objectForKey: @"Data"] ] dataUsingEncoding: NSUTF8StringEncoding]];
[body addBodyPart: bodyPart];
// Add attachments from the original mail - skip deletions
if ([attachmentKeys count])
{
id currentAttachment;
NGHashMap *response;
NSData *bodydata;
NSArray *paths;
NGMimeFileData *fdata;
int i, ii;
BOOL found;
paths = [attachmentKeys keysWithFormat: @"BODY[%{path}]"];
response = [[self fetchParts: paths] objectForKey: @"RawResponse"];
for (i = 0; i < [attachmentKeys count]; i++)
{
currentAttachment = [attachmentKeys objectAtIndex: i];
found = NO;
for (ii = 0; ii < [attachments count]; ii++)
{
// no ClientId means its a deletio
if (![[attachments objectAtIndex: ii] objectForKey: @"ClientId"] &&
[[[[attachments objectAtIndex: ii] objectForKey: @"FileReference"] lastPathComponent] isEqualToString: [currentAttachment objectForKey: @"path"]])
{
found = YES;
break;
}
}
// skip deletions
if (found)
continue;
bodydata = [[[response objectForKey: @"fetch"] objectForKey: [NSString stringWithFormat: @"body[%@]", [currentAttachment objectForKey: @"path"]]] valueForKey: @"data"];
map = [[[NGMutableHashMap alloc] initWithCapacity: 1] autorelease];
[map setObject: [currentAttachment objectForKey: @"mimetype"] forKey: @"content-type"];
[map setObject: [currentAttachment objectForKey: @"encoding"] forKey: @"content-transfer-encoding"];
[map addObject: [NSString stringWithFormat: @"attachment; filename=\"%@\"", [currentAttachment objectForKey: @"filename"]] forKey: @"content-disposition"];
bodyPart = [[[NGMimeBodyPart alloc] initWithHeader: map] autorelease];
fdata = [[NGMimeFileData alloc] initWithBytes:[bodydata bytes] length:[bodydata length]];
[bodyPart setBody: fdata];
RELEASE(fdata);
[body addBodyPart: bodyPart];
}
}
// add new attachments
for (i = 0; i < [attachments count]; i++)
{
map = [[[NGMutableHashMap alloc] initWithCapacity: 1] autorelease];
a = [attachments objectAtIndex: i];
// no ClientId means its a deletion
if (![a objectForKey: @"ClientId"])
continue;
[map setObject: @"application/octet-stream" forKey: @"content-type"]; // FIXME ?? can we guess the right content-type
[map setObject: @"base64" forKey: @"content-transfer-encoding"];
[map setObject: [NSString stringWithFormat: @"attachment; filename=\"%@\"", [a objectForKey: @"DisplayName"]] forKey: @"content-disposition"];
bodyPart = [[[NGMimeBodyPart alloc] initWithHeader:map] autorelease];
[bodyPart setBody: [[a objectForKey: @"Content"] stringByDecodingBase64]];
[body addBodyPart: bodyPart];
}
[draftMessage setBody: body];
}
else
{
[map setObject: (bodyType == 1 ? @"text/plain; charset=utf-8" : @"text/html; charset=utf-8")
forKey: @"content-type"];
[map setObject: @"quoted-printable" forKey: @"content-transfer-encoding"];
draftMessage = [[[NGMimeMessage alloc] initWithHeader: map] autorelease];
[draftMessage setBody: [[NSString stringWithFormat: @"%@", [[theValues objectForKey: @"Body"] objectForKey: @"Data"] ] dataUsingEncoding: NSUTF8StringEncoding]];
}
generator = [[[NGMimeMessageGenerator alloc] init] autorelease];
message_data = [generator generateMimeFromPart: draftMessage];
}
if (message_data)
{
client = [[self imap4Connection] client];
if (![imap4 doesMailboxExistAtURL: [container imap4URL]])
{
[[self imap4Connection] createMailbox: [[self imap4Connection] imap4FolderNameForURL: [container imap4URL]]
atURL: [[self mailAccountFolder] imap4URL]];
[imap4 flushFolderHierarchyCache];
}
folder = [imap4 imap4FolderNameForURL: [container imap4URL]];
result = [client append: message_data
toFolder: folder
withFlags: [NSArray arrayWithObjects: @"draft", nil]];
serverId = [NSString stringWithFormat: @"%d", [self IMAP4IDFromAppendResult: result]];
[theBuffer appendString: @"<ApplicationData>"];
[theBuffer appendFormat: @"<ConversationId xmlns=\"Email2:\">%@</ConversationId>", [[messageId dataUsingEncoding: NSUTF8StringEncoding] activeSyncRepresentationInContext: context]];
if ([attachments count])
{
[theBuffer appendString: @"<Attachments xmlns=\"AirSyncBase:\">"];
for (i = 0; i < [attachments count]; i++)
{
a = [attachments objectAtIndex: i];
[theBuffer appendString: @"<Attachment>"];
[theBuffer appendFormat: @"<ClientId xmlns=\"AirSyncBase:\">%@</ClientId>", [a objectForKey: @"ClientId"]];
[theBuffer appendFormat: @"<FileReference xmlns=\"AirSyncBase:\">mail/%@/%@/%d</FileReference>", [[[self container] relativeImap4Name] stringByEscapingURL], serverId, i+2];
[theBuffer appendString: @"</Attachment>"];
}
[theBuffer appendString: @"</Attachments>"];
}
[theBuffer appendString: @"</ApplicationData>"];
if ([[result objectForKey: @"result"] boolValue])
return serverId;
}
return nil;
}
@end
+24 -19
View File
@@ -45,27 +45,23 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- (NSString *) activeSyncRepresentationInContext: (WOContext *) context
{
NSMutableString *s;
NSCalendarDate *nextAlarmDate;
NSInteger delta;
s = [NSMutableString string];
nextAlarmDate = [self nextAlarmDate];
delta = (int)(([[(iCalEvent *)parent startDate] timeIntervalSince1970] - [nextAlarmDate timeIntervalSince1970])/60);
if ([[self action] caseInsensitiveCompare: @"DISPLAY"] == NSOrderedSame)
if ([parent isKindOfClass: [iCalEvent class]])
{
NSCalendarDate *nextAlarmDate;
NSInteger delta;
nextAlarmDate = [self nextAlarmDate];
delta = (int)(([[(iCalEvent *)parent startDate] timeIntervalSince1970] - [nextAlarmDate timeIntervalSince1970])/60);
if ([parent isKindOfClass: [iCalEvent class]])
{
// don't send negative reminder - not supported
if (delta > 0)
[s appendFormat: @"<Reminder xmlns=\"Calendar:\">%d</Reminder>", (int)delta];
}
else
{
[s appendFormat: @"<ReminderTime xmlns=\"Task:\">%@</ReminderTime>", [nextAlarmDate activeSyncRepresentationInContext: context]];
}
// don't send negative reminder - not supported
if (delta > 0)
[s appendFormat: @"<Reminder xmlns=\"Calendar:\">%d</Reminder>", (int)delta];
}
else
{
[s appendFormat: @"<ReminderTime xmlns=\"Task:\">%@</ReminderTime>", [nextAlarmDate activeSyncRepresentationInContext: context]];
}
return s;
@@ -86,7 +82,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
trigger = [iCalTrigger elementWithTag: @"TRIGGER"];
[trigger setValueType: @"DURATION"];
[self setTrigger: trigger];
[self setAction: @"DISPLAY"];
if (![[self action] length])
[self setAction: @"DISPLAY"];
// SOGo web ui only supports 1w but not 2w (custom reminder only supports min/hours/days)
// 1week = -P1W
@@ -115,8 +112,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
trigger = [iCalTrigger elementWithTag: @"TRIGGER"];
[trigger setValueType: @"DATE-TIME"];
[trigger setSingleValue: [NSString stringWithFormat: @"%@Z", [o iCalFormattedDateTimeString]] forKey: @""];
if ((o = [theValues objectForKey: @"ReminderSet"]))
{
if ([o intValue] == 0)
[trigger setValue: 0 ofAttribute: @"x-webstatus" to: @"triggered"];
}
[self setTrigger: trigger];
[self setAction: @"DISPLAY"];
if (![[self action] length])
[self setAction: @"DISPLAY"];
}
}
+35 -23
View File
@@ -128,7 +128,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// StartTime -- http://msdn.microsoft.com/en-us/library/ee157132(v=exchg.80).aspx
if ([self startDate])
{
if ([self isAllDay] && !tz)
if ([self isAllDay] && !tz && [[context objectForKey: @"ASProtocolVersion"] floatValue] < 16.0)
[s appendFormat: @"<StartTime xmlns=\"Calendar:\">%@</StartTime>",
[[[self startDate] dateByAddingYears: 0 months: 0 days: 0
hours: 0 minutes: 0
@@ -141,7 +141,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// EndTime -- http://msdn.microsoft.com/en-us/library/ee157945(v=exchg.80).aspx
if ([self endDate])
{
if ([self isAllDay] && !tz)
if ([self isAllDay] && !tz && [[context objectForKey: @"ASProtocolVersion"] floatValue] < 16.0)
[s appendFormat: @"<EndTime xmlns=\"Calendar:\">%@</EndTime>",
[[[self endDate] dateByAddingYears: 0 months: 0 days: 0
hours: 0 minutes: 0
@@ -231,9 +231,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
}
else
{
// If it's a normal event (ie, with no organizer/attendee) or we are the organizer to an event
// invitation, we set the busy status to 2 (Busy)
[s appendFormat: @"<BusyStatus xmlns=\"Calendar:\">%d</BusyStatus>", 2];
// If it's a normal event (i.e. with no organizer/attendee) or we are the organizer of an event
// invitation, we set the busy status depending on TRANSP.
[s appendFormat: @"<BusyStatus xmlns=\"Calendar:\">%d</BusyStatus>", (([self isOpaque]) ? 2 : 0)];
}
[s appendFormat: @"<MeetingStatus xmlns=\"Calendar:\">%d</MeetingStatus>", meetingStatus];
@@ -244,7 +244,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Location
if ([[self location] length])
[s appendFormat: @"<Location xmlns=\"Calendar:\">%@</Location>", [[self location] activeSyncRepresentationInContext: context]];
{
if ([[context objectForKey: @"ASProtocolVersion"] floatValue] >= 16.0)
[s appendFormat: @"<Location xmlns=\"AirSyncBase:\"><DisplayName>%@</DisplayName></Location>", [[self location] activeSyncRepresentationInContext: context]];
else
[s appendFormat: @"<Location xmlns=\"Calendar:\">%@</Location>", [[self location] activeSyncRepresentationInContext: context]];
}
// Importance - NOT SUPPORTED - DO NOT ENABLE
//o = [self priority];
@@ -316,7 +321,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
iCalAlarm *alarm;
alarm = [self firstDisplayOrAudioAlarm];
alarm = [self firstSupportedAlarm];
[s appendString: [alarm activeSyncRepresentationInContext: context]];
}
@@ -442,6 +447,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
NSCalendarDate *oldstart;
NSTimeZone *userTimeZone;
iCalTimeZone *tz;
iCalAlarm *alarm;
id o;
int deltasecs;
@@ -451,7 +457,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
occurences = [NSMutableArray arrayWithArray: [[self parent] events]];
if ((o = [theValues objectForKey: @"UID"]))
if ((o = [theValues objectForKey: ([[context objectForKey: @"ASProtocolVersion"] floatValue] >= 16.0) ? @"ClientUid" : @"UID"]))
[self setUid: o];
// FIXME: merge with iCalToDo
@@ -474,7 +480,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
if ((o = [theValues objectForKey: @"BusyStatus"]))
{
[o intValue];
if ([o boolValue])
[self setTransparency: @"OPAQUE"];
else
[self setTransparency: @"TRANSPARENT"];
}
//
@@ -527,8 +536,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
[self setComment: o];
}
if ((o = [theValues objectForKey: @"Location"]))
if ([[context objectForKey: @"ASProtocolVersion"] floatValue] < 16.0 && (o = [theValues objectForKey: @"Location"]))
[self setLocation: o];
else if ([[context objectForKey: @"ASProtocolVersion"] floatValue] >= 16.0 && (o = [theValues objectForKey: @"Location"]) && [o isKindOfClass: [NSDictionary class]])
[self setLocation: [o objectForKey: @"DisplayName"]];
deltasecs = 0;
start = nil;
@@ -572,23 +583,19 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
}
}
//
// If an alarm is deinfed with an action != DISPLAY, we ignore the alarm - don't want to overwrite.
//
if ([self hasAlarms] && [[[[self alarms] objectAtIndex: 0] action] caseInsensitiveCompare: @"DISPLAY"] != NSOrderedSame)
{
// Ignore the alarm for now
}
else if ((o = [theValues objectForKey: @"Reminder"]))
if ((o = [theValues objectForKey: @"Reminder"]) && [o length])
{
if ([self hasAlarms])
alarm = [[self firstSupportedAlarm] mutableCopy];
else
alarm = [[iCalAlarm alloc] init];
// NOTE: Outlook sends a 15 min reminder (18 hour for allday) if no reminder is specified
// although no default reminder is defined (File -> Options -> Clendar -> Calendar Options - > Default Reminders)
//
// http://answers.microsoft.com/en-us/office/forum/office_2013_release-outlook/desktop-outlook-calendar-creates-entries-with/9aef72d8-81bb-4a32-a6ab-bf7d216fb811?page=5&tm=1395690285088
//
iCalAlarm *alarm;
alarm = [[iCalAlarm alloc] init];
[alarm takeActiveSyncValues: theValues inContext: context];
[self removeAllAlarms];
@@ -830,7 +837,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
}
}
// Attendees - we don't touch the values if we're an attendee. This is gonna
// be done automatically by the ActiveSync client when invoking MeetingResponse.
if (![self userIsAttendee: [context activeUser]])
@@ -852,10 +858,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// { "Attendee_Email" = "sogo3@example.com"; "Attendee_Name" = "Wolfgang Fritz"; "Attendee_Status" = 5; "Attendee_Type" = 1; }
attendee = [o objectAtIndex: i];
if ([self isOrganizer: [attendee objectForKey: @"Attendee_Email"]])
continue;
person = [iCalPerson elementWithTag: @"attendee"];
[person setCn: [attendee objectForKey: @"Attendee_Name"]];
[person setEmail: [attendee objectForKey: @"Attendee_Email"]];
status = [[attendee objectForKey: @"Attendee_Status"] intValue];
switch (status)
@@ -872,7 +881,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
case 0:
case 5:
default:
[person setPartStat: @"NEEDS-ACTION"];
{
[person setPartStat: @"NEEDS-ACTION"];
[person setRsvp: @"TRUE"];
}
break;
}
+15 -3
View File
@@ -102,10 +102,22 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
if ([self hasAlarms])
{
iCalAlarm *alarm;
NSString *webstatus;
alarm = [self firstDisplayOrAudioAlarm];
[s appendFormat: @"<ReminderSet xmlns=\"Tasks:\">%d</ReminderSet>", 1];
[s appendString: [alarm activeSyncRepresentationInContext: context]];
if ((alarm = [self firstSupportedAlarm]))
{
webstatus = [[alarm trigger] value: 0 ofAttribute: @"x-webstatus"];
if (!webstatus || ([webstatus caseInsensitiveCompare: @"TRIGGERED"] != NSOrderedSame))
[s appendFormat: @"<ReminderSet xmlns=\"Tasks:\">%d</ReminderSet>", 1];
else
[s appendFormat: @"<ReminderSet xmlns=\"Tasks:\">%d</ReminderSet>", 0];
[s appendString: [alarm activeSyncRepresentationInContext: context]];
}
else
{
[s appendFormat: @"<ReminderSet xmlns=\"Tasks:\">%d</ReminderSet>", 0];
}
}
else
{
+6 -2
View File
@@ -57,6 +57,9 @@ ProxyPreserveHost On
# Allow from your-cas-host-addr
# </Proxy>
# Redirect / to /SOGo
#RedirectMatch ^/$ https://mail.yourdomain.com/SOGo
# Enable to use Microsoft ActiveSync support
# Note that you MUST have many sogod workers to use ActiveSync.
# See the SOGo Installation and Configuration guide for more details.
@@ -68,10 +71,11 @@ ProxyPreserveHost On
ProxyPass /SOGo http://127.0.0.1:20000/SOGo retry=0
<Proxy http://127.0.0.1:20000/SOGo>
## adjust the following to your configuration
## and do not forget to enable the headers module
## Adjust the following to your configuration
## and make sure to enable the headers module
<IfModule headers_module>
RequestHeader set "x-webobjects-server-port" "443"
SetEnvIf Host (.*) HTTP_HOST=$1
RequestHeader set "x-webobjects-server-name" "%{HTTP_HOST}e" env=HTTP_HOST
RequestHeader set "x-webobjects-server-url" "https://%{HTTP_HOST}e" env=HTTP_HOST
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loaded 100 of 1409 files, more files were not shown because too many files have changed in this diff. Show more