Compare commits

...
588 Commits
Author SHA1 Message Date
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
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
1288 changed files with 50759 additions and 16627 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
+22
View File
@@ -21,6 +21,7 @@ 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.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
@@ -35,6 +36,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]
@@ -57,6 +59,7 @@ 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.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
@@ -71,6 +74,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]
@@ -93,6 +97,7 @@ 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.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
@@ -107,6 +112,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]
@@ -129,6 +135,7 @@ 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.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
@@ -143,6 +150,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]
@@ -165,6 +173,7 @@ 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.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
@@ -179,6 +188,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]
@@ -201,6 +211,7 @@ 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.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
@@ -215,6 +226,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]
@@ -237,6 +249,7 @@ 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.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
@@ -251,6 +264,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]
@@ -273,6 +287,7 @@ 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.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
@@ -287,6 +302,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]
@@ -309,6 +325,7 @@ 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.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
@@ -323,6 +340,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]
@@ -345,6 +363,7 @@ 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.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
@@ -359,6 +378,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]
@@ -381,6 +401,7 @@ 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.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
@@ -395,4 +416,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]];
+124 -9
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>
@@ -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>"];
}
}
@@ -1221,6 +1333,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)
@@ -1581,7 +1696,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]];
@@ -2540,7 +2655,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++)
{
+118 -61
View File
@@ -741,14 +741,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 +1151,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 +1222,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
@@ -2432,7 +2439,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 +2766,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 +2776,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 +2788,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 +2831,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 +2854,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 +2874,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 +2887,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++;
}
}
}
@@ -3541,10 +3596,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 +3629,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 +3672,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
+28 -13
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];
@@ -451,7 +456,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 +479,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 +535,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;
@@ -579,7 +589,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
// Ignore the alarm for now
}
else if ((o = [theValues objectForKey: @"Reminder"]))
else if ((o = [theValues objectForKey: @"Reminder"]) && [o length])
{
// 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)
@@ -830,7 +840,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 +861,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 +884,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;
}
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.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loaded 100 of 1288 files, more files were not shown because too many files have changed in this diff. Show more