From c8d8a587b8adab7959cbe357e30a8e3e5f86d303 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 16 Jul 2010 02:21:01 +0000 Subject: [PATCH 01/23] Monotone-Parent: 77a1a396ead2722d4c170d71c3f90eb39e0a4eee Monotone-Revision: fa40d65d7c930f25d8bdbc5eb255f787fa05626f Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-16T02:21:01 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 1 + UI/Scheduler/UIxCalListingActions.m | 33 ++++++++++++++--------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 229527c5e..3fe3766f2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -11,6 +11,7 @@ * UI/Scheduler/UIxCalListingActions.m (_aptFolder:withClientObject:): removed unused method. + (_fixDates:): apply fix also for monthly views. * UI/WebServerResources/UIxAppointmentEditor.js (onComposeToAllAttendees): take the status image DIV into account diff --git a/UI/Scheduler/UIxCalListingActions.m b/UI/Scheduler/UIxCalListingActions.m index 3329bb799..8e4df8e5d 100644 --- a/UI/Scheduler/UIxCalListingActions.m +++ b/UI/Scheduler/UIxCalListingActions.m @@ -256,23 +256,22 @@ static NSArray *tasksFields = nil; static NSString *fields[] = { @"startDate", @"c_startdate", @"endDate", @"c_enddate" }; - if (dayBasedView) - for (count = 0; count < 2; count++) - { - aDateField = fields[count * 2]; - aDate = [aRecord objectForKey: aDateField]; - daylightOffset = (int) ([userTimeZone secondsFromGMTForDate: aDate] - - [userTimeZone secondsFromGMTForDate: startDate]); - if (daylightOffset) - { - aDate = [aDate dateByAddingYears: 0 months: 0 days: 0 hours: 0 - minutes: 0 seconds: daylightOffset]; - [aRecord setObject: aDate forKey: aDateField]; - aDateValue = [NSNumber numberWithInt: [aDate timeIntervalSince1970]]; - [aRecord setObject: aDateValue forKey: fields[count * 2 + 1]]; - } - } - + for (count = 0; count < 2; count++) + { + aDateField = fields[count * 2]; + aDate = [aRecord objectForKey: aDateField]; + daylightOffset = (int) ([userTimeZone secondsFromGMTForDate: aDate] + - [userTimeZone secondsFromGMTForDate: startDate]); + if (daylightOffset) + { + aDate = [aDate dateByAddingYears: 0 months: 0 days: 0 hours: 0 + minutes: 0 seconds: daylightOffset]; + [aRecord setObject: aDate forKey: aDateField]; + aDateValue = [NSNumber numberWithInt: [aDate timeIntervalSince1970]]; + [aRecord setObject: aDateValue forKey: fields[count * 2 + 1]]; + } + } + aDateValue = [aRecord objectForKey: @"c_recurrence_id"]; aDate = [aRecord objectForKey: @"cycleStartDate"]; if (aDateValue && aDate) From 0d222c27740d260a2d977cb213e37e812bff1095 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 16 Jul 2010 02:22:52 +0000 Subject: [PATCH 02/23] Monotone-Parent: fa40d65d7c930f25d8bdbc5eb255f787fa05626f Monotone-Revision: 9ea99adedaf5e690e25346e8ed3b4051c589bddc Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-16T02:22:52 Monotone-Branch: ca.inverse.sogo --- NEWS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index dd6cbeb54..a29e95872 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -1.2-2010XXXX (1.2.3) +1.2-2010XXXX (1.3.0) -------------------- - added support for the "tentative" status in the invitation responses - inviting a group of contacts is now possible, where each contact will be @@ -14,6 +14,8 @@ accessed from his own "Calendar" base collection - events are now displayed with the coloured stripe representing their category, if one is defined in the preferences +- fixed display of all-day events in a monthly view where the timezone differs + from the current one - the event location is now displayed in the calendar view when defined properly - added a caching mechanism for freebusy requests, in order to accelerate the From dd963bb03c7df4fbce013560667295a1b7e3a143 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 16 Jul 2010 11:47:22 +0000 Subject: [PATCH 03/23] typo fix in the spec file Monotone-Parent: e750571b424fd6eb63b5c1e2704f0f04635a6e51 Monotone-Revision: 764dc2a57b1679736fee67beb1479636c8a1b54b Monotone-Author: ludovic@Sophos.ca Monotone-Date: 2010-07-16T11:47:22 Monotone-Branch: ca.inverse.sogo --- sogo.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sogo.spec b/sogo.spec index 09c64e6b1..90eec6b9d 100644 --- a/sogo.spec +++ b/sogo.spec @@ -188,7 +188,7 @@ rm -fr ${RPM_BUILD_ROOT} %config %{_sysconfdir}/httpd/conf.d/SOGo.conf %config %{_sysconfdir}/sysconfig/sogo -%doc ChangeLog README NEWS Scripts/sql-update-20070724.sh Scripts/sql-update-20070822.sh Scripts/sql-update-20080303.sh Scripts/sql-update-101_to_102.sh Scripts/sql-update-1.2.2_to_1.3.0.sh sql-update-1.2.2_to_1.3.0-mysql.sh +%doc ChangeLog README NEWS Scripts/sql-update-20070724.sh Scripts/sql-update-20070822.sh Scripts/sql-update-20080303.sh Scripts/sql-update-101_to_102.sh Scripts/sql-update-1.2.2_to_1.3.0.sh Scripts/sql-update-1.2.2_to_1.3.0-mysql.sh %files -n sogo-tool %{prefix}/Tools/Admin/sogo-tool From aa24b42521d1818d4ff9f1cb8f49eddd3026b2e8 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 16 Jul 2010 14:19:34 +0000 Subject: [PATCH 04/23] style Monotone-Parent: d68ff2564716354de100688f82825ac0b5a5f2e9 Monotone-Revision: ab1a3804c938ec7df1f4f5209f7299df3e3042d1 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-16T14:19:34 Monotone-Branch: ca.inverse.sogo --- SOPE/NGCards/NSArray+NGCards.m | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/SOPE/NGCards/NSArray+NGCards.m b/SOPE/NGCards/NSArray+NGCards.m index ffbb9b92d..edda2f7a7 100644 --- a/SOPE/NGCards/NSArray+NGCards.m +++ b/SOPE/NGCards/NSArray+NGCards.m @@ -67,17 +67,14 @@ cmpTag = [aTag uppercaseString]; - matchingElements = [NSMutableArray new]; - [matchingElements autorelease]; + matchingElements = [NSMutableArray arrayWithCapacity: 16]; allElements = [self objectEnumerator]; - currentElement = [allElements nextObject]; - while (currentElement) + while ((currentElement = [allElements nextObject])) { currentTag = [[currentElement tag] uppercaseString]; if ([currentTag isEqualToString: cmpTag]) [matchingElements addObject: currentElement]; - currentElement = [allElements nextObject]; } return matchingElements; @@ -92,16 +89,12 @@ allElements = [self objectEnumerator]; - matchingElements = [NSMutableArray new]; - [matchingElements autorelease]; - currentElement = [allElements nextObject]; - while (currentElement) - { - if ([currentElement hasAttribute: anAttribute - havingValue: aValue]) - [matchingElements addObject: currentElement]; - currentElement = [allElements nextObject]; - } + matchingElements = [NSMutableArray arrayWithCapacity: 16]; + + while ((currentElement = [allElements nextObject])) + if ([currentElement hasAttribute: anAttribute + havingValue: aValue]) + [matchingElements addObject: currentElement]; return matchingElements; } From 9b83f2655f9e047f936688fc78f7093b934943b0 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 16 Jul 2010 14:34:39 +0000 Subject: [PATCH 05/23] style Monotone-Parent: ab1a3804c938ec7df1f4f5209f7299df3e3042d1 Monotone-Revision: 4afc986f42a77cc538d46f41f372499f825fa9c4 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-16T14:34:39 Monotone-Branch: ca.inverse.sogo --- .../Appointments/SOGoAppointmentFolders.m | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/SoObjects/Appointments/SOGoAppointmentFolders.m b/SoObjects/Appointments/SOGoAppointmentFolders.m index 7e861f424..dcacacbf5 100644 --- a/SoObjects/Appointments/SOGoAppointmentFolders.m +++ b/SoObjects/Appointments/SOGoAppointmentFolders.m @@ -412,32 +412,6 @@ static SoSecurityManager *sm = nil; return componentSet; } -- (void) reloadWebCalendars: (BOOL) forceReload -{ - NSArray *refs; - SOGoWebAppointmentFolder *folder; - SOGoUserSettings *us; - NSDictionary *calSettings; - NSString *ref; - int count, max; - - [self _migrateWebCalendarsSettings]; - us = [[SOGoUser userWithLogin: owner] userSettings]; - calSettings = [us objectForKey: @"Calendar"]; - refs = [[calSettings objectForKey: @"WebCalendars"] allKeys]; - max = [refs count]; - for (count = 0; count < max; count++) - { - ref = [refs objectAtIndex: count]; - folder = [SOGoWebAppointmentFolder - folderWithSubscriptionReference: ref - inContainer: self]; - if (folder - && (forceReload || [folder reloadOnLogin])) - [folder loadWebCalendar]; - } -} - - (void) _migrateWebCalendarsSettings { SOGoUserSettings *us; @@ -474,6 +448,32 @@ static SoSecurityManager *sm = nil; [us synchronize]; } +- (void) reloadWebCalendars: (BOOL) forceReload +{ + NSArray *refs; + SOGoWebAppointmentFolder *folder; + SOGoUserSettings *us; + NSDictionary *calSettings; + NSString *ref; + int count, max; + + [self _migrateWebCalendarsSettings]; + us = [[SOGoUser userWithLogin: owner] userSettings]; + calSettings = [us objectForKey: @"Calendar"]; + refs = [[calSettings objectForKey: @"WebCalendars"] allKeys]; + max = [refs count]; + for (count = 0; count < max; count++) + { + ref = [refs objectAtIndex: count]; + folder = [SOGoWebAppointmentFolder + folderWithSubscriptionReference: ref + inContainer: self]; + if (folder + && (forceReload || [folder reloadOnLogin])) + [folder loadWebCalendar]; + } +} + - (NSException *) _fetchPersonalFolders: (NSString *) sql withChannel: (EOAdaptorChannel *) fc { From 9fb92479d6d23fa13f5bfafeda9c93a84645dd4b Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 16 Jul 2010 15:03:16 +0000 Subject: [PATCH 06/23] Monotone-Parent: 4afc986f42a77cc538d46f41f372499f825fa9c4 Monotone-Revision: 6920d8cb7745acb5c4574fa10c4101bc1a87cca7 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-16T15:03:16 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 7 +++ .../Appointments/SOGoAppointmentObject.m | 62 +++++++++++++++---- 2 files changed, 58 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3fe3766f2..c431727be 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2010-07-16 Wolfgang Sourdeau + + * SoObjects/Appointments/SOGoAppointmentObject.m + (_handleUpdatedEvent:fromOldEvent:): added handling of delegation + chains when resetting the participation status of the attendees. + Fixes #688. + 2010-07-15 Wolfgang Sourdeau * SoObjects/SOGo/SOGoUser.m (-personalCalendarFolderInContext:): diff --git a/SoObjects/Appointments/SOGoAppointmentObject.m b/SoObjects/Appointments/SOGoAppointmentObject.m index 5e43eafc7..2e775624a 100644 --- a/SoObjects/Appointments/SOGoAppointmentObject.m +++ b/SoObjects/Appointments/SOGoAppointmentObject.m @@ -328,17 +328,56 @@ } } -- (void) _requireResponseFromAttendees: (NSArray *) attendees +- (void) _removeDelegationChain: (iCalPerson *) delegate + inEvent: (iCalEvent *) event { - NSEnumerator *enumerator; - iCalPerson *currentAttendee; + NSString *delegatedTo, *mailTo; - enumerator = [attendees objectEnumerator]; - while ((currentAttendee = [enumerator nextObject])) + delegatedTo = [delegate delegatedTo]; + if ([delegatedTo length] > 0) { + mailTo = [delegatedTo rfc822Email]; + delegate = [event findAttendeeWithEmail: mailTo]; + if (delegate) + { + [self _removeDelegationChain: delegate + inEvent: event]; + [event removeFromAttendees: delegate]; + } + else + [self errorWithFormat: + @"broken chain: delegate with email '%@' was not found", + mailTo]; + } +} + +/* This method returns YES when any attendee has been removed and NO + otherwise. */ +- (BOOL) _requireResponseFromAttendees: (iCalEvent *) event +{ + NSArray *attendees; + iCalPerson *currentAttendee; + BOOL listHasChanged; + int count, max; + + attendees = [event attendees]; + max = [attendees count]; + + for (count = 0; count < max; count++) + { + currentAttendee = [attendees objectAtIndex: count]; + if ([[currentAttendee delegatedTo] length] > 0) + { + [self _removeDelegationChain: currentAttendee + inEvent: event]; + [currentAttendee setDelegatedTo: nil]; + listHasChanged = YES; + } [currentAttendee setRsvp: @"TRUE"]; [currentAttendee setParticipationStatus: iCalPersonPartStatNeedsAction]; } + + return listHasChanged; } - (void) _handleSequenceUpdateInEvent: (iCalEvent *) newEvent @@ -400,6 +439,13 @@ iCalEventChanges *changes; changes = [newEvent getChangesRelativeToEvent: oldEvent]; + if ([changes sequenceShouldBeIncreased]) + { + // Set new attendees status to "needs action" and recompute changes when + // the list of attendees has changed. + if ([self _requireResponseFromAttendees: newEvent]) + changes = [newEvent getChangesRelativeToEvent: oldEvent]; + } attendees = [changes deletedAttendees]; if ([attendees count]) { @@ -417,8 +463,6 @@ if ([changes sequenceShouldBeIncreased]) { [newEvent increaseSequence]; - // Set new attendees status to "needs action" - [self _requireResponseFromAttendees: [newEvent attendees]]; // Update attendees calendars and send them an update // notification by email [self _handleSequenceUpdateInEvent: newEvent @@ -455,10 +499,6 @@ if ([attendees count]) { - NSArray *originalAttendees; - - originalAttendees = [NSArray arrayWithArray: [newEvent attendees]]; - // Send an invitation to new attendees [self _handleAddedUsers: attendees fromEvent: newEvent]; [self sendEMailUsingTemplateNamed: @"Invitation" From 9c9ae46e8c3e9fac02503f5b4e7042275b7ba3a3 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 16 Jul 2010 14:11:14 +0000 Subject: [PATCH 07/23] See ChangeLog Monotone-Parent: 6920d8cb7745acb5c4574fa10c4101bc1a87cca7 Monotone-Revision: 05db10b383b8539c538b66c73af8db19b07dc441 Monotone-Author: ludovic@Sophos.ca Monotone-Date: 2010-07-16T14:11:14 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 7 +++++++ UI/Contacts/UIxContactView.m | 26 ++++++++++++++++++++------ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index c431727be..34bc7b304 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2010-07-16 Ludovic Marcotte + + * UI/Contacts/UIxContactView.m + In secondaryEmail, we make sure that we loop + in all available email address and we pick the + first one that doesn't match the primaryEmail + 2010-07-16 Wolfgang Sourdeau * SoObjects/Appointments/SOGoAppointmentObject.m diff --git a/UI/Contacts/UIxContactView.m b/UI/Contacts/UIxContactView.m index dde492ca3..77fe8d4f5 100644 --- a/UI/Contacts/UIxContactView.m +++ b/UI/Contacts/UIxContactView.m @@ -139,15 +139,29 @@ // We might not have a preferred item but rather something like this: // EMAIL;TYPE=work:dd@ee.com // EMAIL;TYPE=home:ff@gg.com - // In this case, we always return the last entry. + // + // or: + // + // EMAIL;TYPE=INTERNET:a@a.com + // EMAIL;TYPE=INTERNET,HOME:b@b.com + // + // In this case, we always return the entry NOT matching the primaryEmail if ([emails count] > 0) { - email = [[emails objectAtIndex: [emails count]-1] value: 0]; + int i; - if ([email caseInsensitiveCompare: [card preferredEMail]] != NSOrderedSame) - mailTo = [NSString stringWithFormat: @"');\">" - @"%@", email, [[card fn] stringByReplacingString: @"\"" withString: @""], email, email]; + for (i = 0; i < [emails count]; i++) + { + email = [[emails objectAtIndex: i] value: 0]; + + if ([email caseInsensitiveCompare: [card preferredEMail]] != NSOrderedSame) + { + mailTo = [NSString stringWithFormat: @"');\">" + @"%@", email, [[card fn] stringByReplacingString: @"\"" withString: @""], email, email]; + break; + } + } } return [self _cardStringWithLabel: @"Additional Email:" From db34f7922249920e54979b61280470f5436b984d Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 16 Jul 2010 16:13:05 +0000 Subject: [PATCH 08/23] See ChangeLog Monotone-Parent: 05db10b383b8539c538b66c73af8db19b07dc441 Monotone-Revision: b10b8128ebc4881915a970495f64caebed8fa4e9 Monotone-Author: ludovic@Sophos.ca Monotone-Date: 2010-07-16T16:13:05 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 5 +++++ UI/Contacts/UIxContactEditor.m | 4 +++- UI/Contacts/UIxContactView.m | 4 +++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 34bc7b304..8a84869db 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,11 @@ In secondaryEmail, we make sure that we loop in all available email address and we pick the first one that doesn't match the primaryEmail + * UI/Contacts/UIxContactEditor.m + UI/Contacts/UIxContactView.m - we make sure, + when excluding a type, that we reset the + local variable to nil since we might exclude + all values in our array. 2010-07-16 Wolfgang Sourdeau diff --git a/UI/Contacts/UIxContactEditor.m b/UI/Contacts/UIxContactEditor.m index 8702f268d..fda3af0d9 100644 --- a/UI/Contacts/UIxContactEditor.m +++ b/UI/Contacts/UIxContactEditor.m @@ -282,6 +282,8 @@ if (![ce hasAttribute: @"type" havingValue: aTypeToExclude]) break; + + value = nil; } } @@ -412,7 +414,7 @@ [self _setSnapshotValue: @"telephoneNumber" to: [self _simpleValueForType: @"work" inArray: elements excluding: @"fax"]]; [self _setSnapshotValue: @"homeTelephoneNumber" - to: [self _simpleValueForType: @"home" inArray: elements excluding: nil]]; + to: [self _simpleValueForType: @"home" inArray: elements excluding: @"fax"]]; [self _setSnapshotValue: @"mobile" to: [self _simpleValueForType: @"cell" inArray: elements excluding: nil]]; [self _setSnapshotValue: @"facsimileTelephoneNumber" diff --git a/UI/Contacts/UIxContactView.m b/UI/Contacts/UIxContactView.m index 77fe8d4f5..d052c46c6 100644 --- a/UI/Contacts/UIxContactView.m +++ b/UI/Contacts/UIxContactView.m @@ -228,6 +228,8 @@ if (![ce hasAttribute: @"type" havingValue: aTypeToExclude]) break; + + phone = nil; } } @@ -243,7 +245,7 @@ - (NSString *) homePhone { - return [self _phoneOfType: @"home" withLabel: @"Home:" excluding: nil]; + return [self _phoneOfType: @"home" withLabel: @"Home:" excluding: @"fax"]; } - (NSString *) fax From a4e3042fe09dbf617a319d49c044017f94591bac Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 16 Jul 2010 17:22:42 +0000 Subject: [PATCH 09/23] Monotone-Parent: 05db10b383b8539c538b66c73af8db19b07dc441 Monotone-Revision: a2eae89ac32b5eb74e9d2879fd2b60d50e3e7071 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-16T17:22:42 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 8 ++++++++ SoObjects/SOGo/SOGoContentObject.m | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 34bc7b304..f9754ff6d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2010-07-16 Wolfgang Sourdeau + + * SoObjects/SOGo/SOGoContentObject.m (-davContentLength): fixed a + crash occurring with certain versions of GNUstep by using + NSISOLatin1StringEncoding instead of UTF8. This is actually the + correct way of doing things anyway since we want to return the + length in bytes and not in characters. + 2010-07-16 Ludovic Marcotte * UI/Contacts/UIxContactView.m diff --git a/SoObjects/SOGo/SOGoContentObject.m b/SoObjects/SOGo/SOGoContentObject.m index 7ce7cc61a..e60b23e85 100644 --- a/SoObjects/SOGo/SOGoContentObject.m +++ b/SoObjects/SOGo/SOGoContentObject.m @@ -372,7 +372,7 @@ - (NSString *) davContentLength { return [NSString stringWithFormat: @"%u", - [content lengthOfBytesUsingEncoding: NSUTF8StringEncoding]]; + [content lengthOfBytesUsingEncoding: NSISOLatin1StringEncoding]]; } // - (NSString *) davResourceType From bb19a2ab6b27494393baaa628edd2fb62f135f11 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 16 Jul 2010 19:28:57 +0000 Subject: [PATCH 10/23] Monotone-Parent: b9ef4467c8539893214db9196096daa10370d0a6 Monotone-Revision: f75e6976fca1f78ba386ba4306bd6b4439f1de17 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-16T19:28:57 Monotone-Branch: ca.inverse.sogo --- SOPE/NGCards/ChangeLog | 5 +++ SOPE/NGCards/GNUmakefile | 2 + SOPE/NGCards/NGVCard.m | 4 ++ SOPE/NGCards/NGVCardPhoto.h | 41 +++++++++++++++++++ SOPE/NGCards/NGVCardPhoto.m | 78 +++++++++++++++++++++++++++++++++++++ 5 files changed, 130 insertions(+) create mode 100644 SOPE/NGCards/NGVCardPhoto.h create mode 100644 SOPE/NGCards/NGVCardPhoto.m diff --git a/SOPE/NGCards/ChangeLog b/SOPE/NGCards/ChangeLog index a7eb1a4b5..077183427 100644 --- a/SOPE/NGCards/ChangeLog +++ b/SOPE/NGCards/ChangeLog @@ -1,3 +1,8 @@ +2010-07-16 Wolfgang Sourdeau + + * NGVCardPhoto.[hm]: new class module that implement facilities + for handling "PHOTO" tags in vcards. + 2010-06-08 Wolfgang Sourdeau * iCalXMLRenderer.m (-[CardGroup xmlRender]): don't append empty diff --git a/SOPE/NGCards/GNUmakefile b/SOPE/NGCards/GNUmakefile index 3691f5fff..90f75848a 100644 --- a/SOPE/NGCards/GNUmakefile +++ b/SOPE/NGCards/GNUmakefile @@ -57,6 +57,7 @@ libNGCards_HEADER_FILES = \ \ NGVCard.h \ NGVList.h \ + NGVCardPhoto.h \ NGVCardReference.h \ # NGVCardAddress.h \ # NGVCardStrArrayValue.h \ @@ -110,6 +111,7 @@ libNGCards_OBJC_FILES = \ \ NGVCard.m \ NGVList.m \ + NGVCardPhoto.m \ NGVCardReference.m \ NGCardsSaxHandler.m \ # IcalElements.m diff --git a/SOPE/NGCards/NGVCard.m b/SOPE/NGCards/NGVCard.m index 41cb7c2b9..861ef82a3 100644 --- a/SOPE/NGCards/NGVCard.m +++ b/SOPE/NGCards/NGVCard.m @@ -26,6 +26,8 @@ #import "NSArray+NGCards.h" +#import "NGVCardPhoto.h" + #import "NGVCard.h" @implementation NGVCard @@ -79,6 +81,8 @@ || [classTag isEqualToString: @"TITLE"] || [classTag isEqualToString: @"VERSION"]) tagClass = [CardElement class]; + else if ([classTag isEqualToString: @"PHOTO"]) + tagClass = [NGVCardPhoto class]; else tagClass = [super classForTag: classTag]; diff --git a/SOPE/NGCards/NGVCardPhoto.h b/SOPE/NGCards/NGVCardPhoto.h new file mode 100644 index 000000000..0b586cb52 --- /dev/null +++ b/SOPE/NGCards/NGVCardPhoto.h @@ -0,0 +1,41 @@ +/* NGVCardPhoto.h - this file is part of NGCards + * + * Copyright (C) 2010 Inverse inc. + * + * Author: Wolfgang Sourdeau + * + * NGCards is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation; either version 2, or (at your option) any + * later version. + * + * NGCards is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with NGCards; see the file COPYING. If not, write to the + * Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + */ + +#ifndef NGVCARDPHOTO_H +#define NGVCARDPHOTO_H + +#import "CardElement.h" + +@class NSData; +@class NSString; + +@interface NGVCardPhoto : CardElement + +- (BOOL) isInline; + +- (NSString *) type; + +- (NSData *) decodedContent; + +@end + +#endif /* NGVCARDPHOTO_H */ diff --git a/SOPE/NGCards/NGVCardPhoto.m b/SOPE/NGCards/NGVCardPhoto.m new file mode 100644 index 000000000..ce00238ec --- /dev/null +++ b/SOPE/NGCards/NGVCardPhoto.m @@ -0,0 +1,78 @@ +/* NGVCardPhoto.m - this file is part of NGCards + * + * Copyright (C) 2010 Inverse inc. + * + * Author: Wolfgang Sourdeau + * + * NGCards is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation; either version 2, or (at your option) any + * later version. + * + * NGCards is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with NGCards; see the file COPYING. If not, write to the + * Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + */ + +#import +#import + +#import +#import + +#import "NGVCardPhoto.h" + +@implementation NGVCardPhoto + +- (BOOL) isInline +{ + return ![[self value: 0 ofAttribute: @"value"] isEqualToString: @"uri"]; +} + +- (NSString *) type +{ + return [[self value: 0 ofAttribute: @"type"] uppercaseString]; +} + +- (NSData *) decodedContent +{ + NSString *encoding, *value; + NSData *decodedContent; + + decodedContent = nil; + + if ([self isInline]) + { + encoding = [[self value: 0 ofAttribute: @"encoding"] uppercaseString]; + if ([encoding isEqualToString: @"B"] + || [encoding isEqualToString: @"BASE64"]) + { + /* We bypass -[values:] because we want to obtain the undecoded + value first. */ + if ([values count] > 0) + { + value = [values objectAtIndex: 0]; + decodedContent = [value dataByDecodingBase64]; + } + else + [self errorWithFormat: @"attempt to decode empty value"]; + } + else + [self errorWithFormat: + @"decoded content requested with an unknown encoding: '%@'", + encoding]; + } + else + [self errorWithFormat: + @"decoded content requested on a PHOTO of type 'uri'"]; + + return decodedContent; +} + +@end From 0f991b582f14a1cf3e64c33a78f5ce15a37c700f Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 16 Jul 2010 19:35:25 +0000 Subject: [PATCH 11/23] Monotone-Parent: f75e6976fca1f78ba386ba4306bd6b4439f1de17 Monotone-Revision: 33c9bbe67c54b7e2a222ee34969604fb76e91600 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-16T19:35:25 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 16 +++ SoObjects/Contacts/GNUmakefile | 1 + SoObjects/Contacts/SOGoContactEntryPhoto.h | 42 +++++++ SoObjects/Contacts/SOGoContactEntryPhoto.m | 114 ++++++++++++++++++ SoObjects/Contacts/SOGoContactGCSEntry.m | 27 +++++ .../Localizable.strings | 1 + UI/Contacts/Czech.lproj/Localizable.strings | 1 + UI/Contacts/Dutch.lproj/Localizable.strings | 1 + UI/Contacts/English.lproj/Localizable.strings | 1 + UI/Contacts/French.lproj/Localizable.strings | 1 + UI/Contacts/German.lproj/Localizable.strings | 1 + .../Hungarian.lproj/Localizable.strings | 1 + UI/Contacts/Italian.lproj/Localizable.strings | 1 + UI/Contacts/Russian.lproj/Localizable.strings | 5 + UI/Contacts/Spanish.lproj/Localizable.strings | 1 + UI/Contacts/Swedish.lproj/Localizable.strings | 1 + UI/Contacts/UIxContactEditor.h | 1 + UI/Contacts/UIxContactEditor.m | 34 ++++++ UI/Contacts/UIxContactView.h | 1 + UI/Contacts/UIxContactView.m | 58 +++++++-- .../Ukrainian.lproj/Localizable.strings | 1 + UI/Contacts/Welsh.lproj/Localizable.strings | 5 + UI/Templates/ContactsUI/UIxContactEditor.wox | 8 ++ UI/Templates/ContactsUI/UIxContactView.wox | 6 +- 24 files changed, 318 insertions(+), 11 deletions(-) create mode 100644 SoObjects/Contacts/SOGoContactEntryPhoto.h create mode 100644 SoObjects/Contacts/SOGoContactEntryPhoto.m diff --git a/ChangeLog b/ChangeLog index ff2d45f2d..0c19e1db1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,21 @@ 2010-07-16 Wolfgang Sourdeau + * UI/Contacts/UIxContactEditor.m (-photosURL): copy of the method + below. + + * UI/Contacts/UIxContactView.m (-photosURL): new access that + returns the URL to the photos contained in the VCARD, whether + inline or not. + (-tabSelection): removed unused method. + + * SoObjects/Contacts/SOGoContactGCSEntry.m + (-lookupName:inContext:acquire:): new overriden method to handle + "photoX" lookups and return the corrsponding SOGoContactEntryPhoto + instance, if exists. + + * SoObjects/Contacts/SOGoContactEntryPhoto.[hm]: new controller + class for VCARD PHOTO objects. + * SoObjects/SOGo/SOGoContentObject.m (-davContentLength): fixed a crash occurring with certain versions of GNUstep by using NSISOLatin1StringEncoding instead of UTF8. This is actually the diff --git a/SoObjects/Contacts/GNUmakefile b/SoObjects/Contacts/GNUmakefile index d1d357e47..cbbfa2e0a 100644 --- a/SoObjects/Contacts/GNUmakefile +++ b/SoObjects/Contacts/GNUmakefile @@ -19,6 +19,7 @@ Contacts_OBJC_FILES = \ SOGoContactLDIFEntry.m \ SOGoContactSourceFolder.m \ SOGoUserFolder+Contacts.m \ + SOGoContactEntryPhoto.m \ Contacts_RESOURCE_FILES += \ Version \ diff --git a/SoObjects/Contacts/SOGoContactEntryPhoto.h b/SoObjects/Contacts/SOGoContactEntryPhoto.h new file mode 100644 index 000000000..e35eb2cd7 --- /dev/null +++ b/SoObjects/Contacts/SOGoContactEntryPhoto.h @@ -0,0 +1,42 @@ +/* SOGoContactEntryPhoto.h - this file is part of SOGo + * + * Copyright (C) 2010 Inverse inc. + * + * Author: Wolfgang Sourdeau + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef SOGOCONTACTENTRYPHOTO_H +#define SOGOCONTACTENTRYPHOTO_H + +#import + +@interface SOGoContactEntryPhoto : SOGoObject +{ + int photoID; +} + ++ (id) entryPhotoWithID: (int) photoId + inContainer: (id) container; + +- (void) setPhotoID: (int) newPhotoID; + +- (NSString *) davContentType; + +@end + +#endif /* SOGOCONTACTENTRYPHOTO_H */ diff --git a/SoObjects/Contacts/SOGoContactEntryPhoto.m b/SoObjects/Contacts/SOGoContactEntryPhoto.m new file mode 100644 index 000000000..850ce59f5 --- /dev/null +++ b/SoObjects/Contacts/SOGoContactEntryPhoto.m @@ -0,0 +1,114 @@ +/* SOGoContactEntryPhoto.m - this file is part of SOGo + * + * Copyright (C) 2010 Inverse inc. + * + * Author: Wolfgang Sourdeau + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#import +#import + +#import +#import + +#import +#import + +#import "SOGoContactObject.h" + +#import "SOGoContactEntryPhoto.h" + +@implementation SOGoContactEntryPhoto + ++ (id) entryPhotoWithID: (int) photoID + inContainer: (id) container +{ + id photo; + + photo + = [super objectWithName: [NSString stringWithFormat: @"photo%d", photoID] + inContainer: container]; + [photo setPhotoID: photoID]; + + return photo; +} + +- (void) setPhotoID: (int) newPhotoID +{ + photoID = newPhotoID; +} + +- (NGVCardPhoto *) photo +{ + NGVCardPhoto *photo; + NSArray *photoElements; + + photoElements = [[container vCard] childrenWithTag: @"photo"]; + if ([photoElements count] > photoID) + photo = [photoElements objectAtIndex: photoID]; + else + photo = nil; + + return photo; +} + +- (id) GETAction: (WOContext *) localContext +{ + NGVCardPhoto *photo; + NSData *data; + id response; + + photo = [self photo]; + if ([photo isInline]) + data = [photo decodedContent]; + else + data = [[photo value: 0] dataUsingEncoding: NSISOLatin1StringEncoding]; + if (data) + { + response = [localContext response]; + + [response setHeader: [self davContentType] forKey: @"content-type"]; + [response setHeader: [NSString stringWithFormat:@" %d", + [data length]] + forKey: @"content-length"]; + [response setContent: data]; + } + else + response = nil; + + return response; +} + +- (NSString *) davContentType +{ + NGVCardPhoto *photo; + NSString *type, *contentType; + + photo = [self photo]; + if ([photo isInline]) + { + type = [[photo type] lowercaseString]; + contentType = [NSString stringWithFormat: @"image/%@", type]; + } + else + contentType = @"text/plain"; + + return contentType; +} + +@end diff --git a/SoObjects/Contacts/SOGoContactGCSEntry.m b/SoObjects/Contacts/SOGoContactGCSEntry.m index 73bca8969..22ee70bc0 100644 --- a/SoObjects/Contacts/SOGoContactGCSEntry.m +++ b/SoObjects/Contacts/SOGoContactGCSEntry.m @@ -24,6 +24,8 @@ #import +#import "SOGoContactEntryPhoto.h" + #import "SOGoContactGCSEntry.h" @implementation SOGoContactGCSEntry @@ -62,6 +64,31 @@ /* actions */ +- (id) lookupName: (NSString *) lookupName + inContext: (id) localContext + acquire: (BOOL) acquire +{ + id obj; + int photoIndex; + NSArray *photoElements; + + if ([lookupName hasPrefix: @"photo"]) + { + photoElements = [[self vCard] childrenWithTag: @"photo"]; + photoIndex = [[lookupName substringFromIndex: 5] intValue]; + if (photoIndex > -1 && photoIndex < [photoElements count]) + obj = [SOGoContactEntryPhoto entryPhotoWithID: photoIndex + inContainer: self]; + else + obj = nil; + } + else + obj = [super lookupName: lookupName inContext: localContext + acquire: acquire]; + + return obj; +} + - (NSException *) copyToFolder: (SOGoGCSFolder *) newFolder { NGVCard *newCard; diff --git a/UI/Contacts/BrazilianPortuguese.lproj/Localizable.strings b/UI/Contacts/BrazilianPortuguese.lproj/Localizable.strings index a92fd2183..6391d8dbb 100644 --- a/UI/Contacts/BrazilianPortuguese.lproj/Localizable.strings +++ b/UI/Contacts/BrazilianPortuguese.lproj/Localizable.strings @@ -2,6 +2,7 @@ "Contact" = "Contact"; "Address" = "Address"; +"Photos" = "Photos"; "Other" = "Other"; "Address Books" = "Addressbooks"; diff --git a/UI/Contacts/Czech.lproj/Localizable.strings b/UI/Contacts/Czech.lproj/Localizable.strings index d255bcd6c..e48aded25 100644 --- a/UI/Contacts/Czech.lproj/Localizable.strings +++ b/UI/Contacts/Czech.lproj/Localizable.strings @@ -2,6 +2,7 @@ "Contact" = "Kontakt"; "Address" = "Adresa"; +"Photos" = "Photos"; "Other" = "Ostatní"; "Address Books" = "Složky kontaktů"; diff --git a/UI/Contacts/Dutch.lproj/Localizable.strings b/UI/Contacts/Dutch.lproj/Localizable.strings index 443ba52e1..91c107c8f 100644 --- a/UI/Contacts/Dutch.lproj/Localizable.strings +++ b/UI/Contacts/Dutch.lproj/Localizable.strings @@ -2,6 +2,7 @@ "Contact" = "Contactpersoon"; "Address" = "Adres"; +"Photos" = "Fotos"; "Other" = "Overige"; "Address Books" = "Addressbooks"; diff --git a/UI/Contacts/English.lproj/Localizable.strings b/UI/Contacts/English.lproj/Localizable.strings index 21f365e0d..a7eb56eff 100644 --- a/UI/Contacts/English.lproj/Localizable.strings +++ b/UI/Contacts/English.lproj/Localizable.strings @@ -2,6 +2,7 @@ "Contact" = "Contact"; "Address" = "Address"; +"Photos" = "Photos"; "Other" = "Other"; "Address Books" = "Address Books"; diff --git a/UI/Contacts/French.lproj/Localizable.strings b/UI/Contacts/French.lproj/Localizable.strings index 54638c801..57127b264 100644 --- a/UI/Contacts/French.lproj/Localizable.strings +++ b/UI/Contacts/French.lproj/Localizable.strings @@ -2,6 +2,7 @@ "Contact" = "Contact"; "Address" = "Adresses"; +"Photos" = "Photos"; "Other" = "Informations complémentaires"; "Address Books" = "Carnet d'adresses"; diff --git a/UI/Contacts/German.lproj/Localizable.strings b/UI/Contacts/German.lproj/Localizable.strings index 577a689c8..206cf5a66 100644 --- a/UI/Contacts/German.lproj/Localizable.strings +++ b/UI/Contacts/German.lproj/Localizable.strings @@ -2,6 +2,7 @@ "Contact" = "Kontakt"; "Address" = "Adresse"; +"Photos" = "Fotos"; "Other" = "Sonstiges"; "Address Books" = "Adressbücher"; diff --git a/UI/Contacts/Hungarian.lproj/Localizable.strings b/UI/Contacts/Hungarian.lproj/Localizable.strings index 9f50e784e..c5a87aaca 100644 --- a/UI/Contacts/Hungarian.lproj/Localizable.strings +++ b/UI/Contacts/Hungarian.lproj/Localizable.strings @@ -2,6 +2,7 @@ "Contact" = "Contact"; "Address" = "Address"; +"Photos" = "Photos"; "Other" = "Other"; "Address Books" = "Addressbooks"; diff --git a/UI/Contacts/Italian.lproj/Localizable.strings b/UI/Contacts/Italian.lproj/Localizable.strings index 9af75b49c..16e3d74bd 100644 --- a/UI/Contacts/Italian.lproj/Localizable.strings +++ b/UI/Contacts/Italian.lproj/Localizable.strings @@ -2,6 +2,7 @@ "Contact" = "Contatto"; "Address" = "Indirizzo"; +"Photos" = "Photos"; "Other" = "Altro"; "Address Books" = "Rubrica"; diff --git a/UI/Contacts/Russian.lproj/Localizable.strings b/UI/Contacts/Russian.lproj/Localizable.strings index d3a3de694..41e431a1c 100644 --- a/UI/Contacts/Russian.lproj/Localizable.strings +++ b/UI/Contacts/Russian.lproj/Localizable.strings @@ -1,5 +1,10 @@ /* this file is in UTF-8 format! */ +"Contact" = "Contact"; +"Address" = "Address"; +"Photos" = "Photos"; +"Other" = "Other"; + "Addressbook" = "Адресная книга"; "Addresses" = "Адреса"; "Update" = "Обновить"; diff --git a/UI/Contacts/Spanish.lproj/Localizable.strings b/UI/Contacts/Spanish.lproj/Localizable.strings index 63f440265..ec4787009 100644 --- a/UI/Contacts/Spanish.lproj/Localizable.strings +++ b/UI/Contacts/Spanish.lproj/Localizable.strings @@ -2,6 +2,7 @@ "Contact" = "Contacto"; "Address" = "Dirección"; +"Photos" = "Photos"; "Other" = "Otros datos"; "Address Books" = "Libretas de direcciones"; diff --git a/UI/Contacts/Swedish.lproj/Localizable.strings b/UI/Contacts/Swedish.lproj/Localizable.strings index 2e229fd7d..355a7fc5d 100644 --- a/UI/Contacts/Swedish.lproj/Localizable.strings +++ b/UI/Contacts/Swedish.lproj/Localizable.strings @@ -2,6 +2,7 @@ "Contact" = "Kontakt"; "Address" = "Adress"; +"Photos" = "Photos"; "Other" = "Annat"; "Address Books" = "Adressböcker"; diff --git a/UI/Contacts/UIxContactEditor.h b/UI/Contacts/UIxContactEditor.h index 0d6269818..c66acdc49 100644 --- a/UI/Contacts/UIxContactEditor.h +++ b/UI/Contacts/UIxContactEditor.h @@ -37,6 +37,7 @@ NSString *preferredEmail; NSString *item; NGVCard *card; + NSMutableArray *photosURL; NSMutableDictionary *snapshot; /* contains the values for editing */ SOGoContactFolder *componentAddressBook; } diff --git a/UI/Contacts/UIxContactEditor.m b/UI/Contacts/UIxContactEditor.m index fda3af0d9..43dbd4734 100644 --- a/UI/Contacts/UIxContactEditor.m +++ b/UI/Contacts/UIxContactEditor.m @@ -22,6 +22,7 @@ #import #import +#import #import #import @@ -33,6 +34,7 @@ #import #import +#import #import #import @@ -51,6 +53,7 @@ { snapshot = [[NSMutableDictionary alloc] initWithCapacity: 16]; preferredEmail = nil; + photosURL = nil; } return self; @@ -60,6 +63,7 @@ { [snapshot release]; [preferredEmail release]; + [photosURL release]; [super dealloc]; } @@ -573,6 +577,36 @@ && [super canCreateOrModify]); } +- (NSArray *) photosURL +{ + NSArray *photoElements; + NSURL *soURL; + NSString *baseInlineURL, *photoURL; + NGVCardPhoto *photo; + int count, max; + + if (!photosURL) + { + soURL = [[self clientObject] soURL]; + baseInlineURL = [soURL absoluteString]; + photoElements = [card childrenWithTag: @"photo"]; + max = [photoElements count]; + photosURL = [[NSMutableArray alloc] initWithCapacity: max]; + for (count = 0; count < max; count++) + { + photo = [photoElements objectAtIndex: count]; + if ([photo isInline]) + photoURL = [NSString stringWithFormat: @"%@/photo%d", + baseInlineURL, count]; + else + photoURL = [photo value: 0]; + [photosURL addObject: photoURL]; + } + } + + return photosURL; +} + - (CardElement *) _elementWithTag: (NSString *) tag ofType: (NSString *) type { diff --git a/UI/Contacts/UIxContactView.h b/UI/Contacts/UIxContactView.h index e617b43ad..9f59c49b0 100644 --- a/UI/Contacts/UIxContactView.h +++ b/UI/Contacts/UIxContactView.h @@ -32,6 +32,7 @@ NSArray *phones; CardElement *homeAdr; CardElement *workAdr; + NSMutableArray *photosURL; } - (NSString *) fullName; diff --git a/UI/Contacts/UIxContactView.m b/UI/Contacts/UIxContactView.m index d052c46c6..4a93c16ab 100644 --- a/UI/Contacts/UIxContactView.m +++ b/UI/Contacts/UIxContactView.m @@ -20,30 +20,40 @@ 02111-1307, USA. */ +#import + #import #import #import +#import #import #import #import -#import +#import #import "UIxContactView.h" @implementation UIxContactView -/* accessors */ +- (id) init +{ + if ((self = [super init])) + { + photosURL = nil; + } -- (NSString *)tabSelection { - NSString *selection; - - selection = [self queryParameterForKey:@"tab"]; - if (selection == nil) - selection = @"attributes"; - return selection; + return self; } +- (void) dealloc +{ + [photosURL release]; + [super dealloc]; +} + +/* accessors */ + - (NSString *) _cardStringWithLabel: (NSString *) label value: (NSString *) value { @@ -630,4 +640,34 @@ return self; } +- (NSArray *) photosURL +{ + NSArray *photoElements; + NSURL *soURL; + NSString *baseInlineURL, *photoURL; + NGVCardPhoto *photo; + int count, max; + + if (!photosURL) + { + soURL = [[self clientObject] soURL]; + baseInlineURL = [soURL absoluteString]; + photoElements = [card childrenWithTag: @"photo"]; + max = [photoElements count]; + photosURL = [[NSMutableArray alloc] initWithCapacity: max]; + for (count = 0; count < max; count++) + { + photo = [photoElements objectAtIndex: count]; + if ([photo isInline]) + photoURL = [NSString stringWithFormat: @"%@/photo%d", + baseInlineURL, count]; + else + photoURL = [photo value: 0]; + [photosURL addObject: photoURL]; + } + } + + return photosURL; +} + @end /* UIxContactView */ diff --git a/UI/Contacts/Ukrainian.lproj/Localizable.strings b/UI/Contacts/Ukrainian.lproj/Localizable.strings index fd713fbb5..e6a20b400 100644 --- a/UI/Contacts/Ukrainian.lproj/Localizable.strings +++ b/UI/Contacts/Ukrainian.lproj/Localizable.strings @@ -2,6 +2,7 @@ "Contact" = "Контакт"; "Address" = "Адреса"; +"Photos" = "Photos"; "Other" = "Інше"; "Address Books" = "Адресні книги"; diff --git a/UI/Contacts/Welsh.lproj/Localizable.strings b/UI/Contacts/Welsh.lproj/Localizable.strings index 61cb476e6..c22616c2c 100644 --- a/UI/Contacts/Welsh.lproj/Localizable.strings +++ b/UI/Contacts/Welsh.lproj/Localizable.strings @@ -1,5 +1,10 @@ /* this file is in UTF-8 format! */ +"Contact" = "Contact"; +"Address" = "Address"; +"Photos" = "Photos"; +"Other" = "Other"; + "Addressbook" = "Llyfr cyfeiriadau"; "Addresses" = "Cyfeiriadau"; "Update" = "Diweddaru"; diff --git a/UI/Templates/ContactsUI/UIxContactEditor.wox b/UI/Templates/ContactsUI/UIxContactEditor.wox index ff2b535f5..91360ae76 100644 --- a/UI/Templates/ContactsUI/UIxContactEditor.wox +++ b/UI/Templates/ContactsUI/UIxContactEditor.wox @@ -29,6 +29,8 @@
  • +
  • +
  • @@ -332,6 +334,12 @@ +
    + +
    +
    +
    diff --git a/UI/Templates/ContactsUI/UIxContactView.wox b/UI/Templates/ContactsUI/UIxContactView.wox index 9584b86de..3fe014d9c 100644 --- a/UI/Templates/ContactsUI/UIxContactView.wox +++ b/UI/Templates/ContactsUI/UIxContactView.wox @@ -18,8 +18,10 @@ />
    +

    Date: Fri, 16 Jul 2010 19:36:29 +0000 Subject: [PATCH 12/23] Monotone-Parent: 33c9bbe67c54b7e2a222ee34969604fb76e91600 Monotone-Revision: 30f6783cdb31153bad1ad3cb37e06dd4506676be Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-16T19:36:29 Monotone-Branch: ca.inverse.sogo --- NEWS | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS b/NEWS index a29e95872..219f6e0f2 100644 --- a/NEWS +++ b/NEWS @@ -22,6 +22,7 @@ display - added the ability to specify a time range when requesting a time slot suggestion +- added support for displaying photos from contacts - added a Ukrainian translation - updated the Czeck translation From cfae359ba7af96a9a64152b4bc6af43ccaf24a5c Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 16 Jul 2010 20:19:55 +0000 Subject: [PATCH 13/23] Monotone-Parent: 30f6783cdb31153bad1ad3cb37e06dd4506676be Monotone-Revision: 1d776c3766bf2049490ce720a4ffc09f3e604e5c Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-16T20:19:55 Monotone-Branch: ca.inverse.sogo --- SOPE/sope-patchset-r1664.diff | 44 ++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/SOPE/sope-patchset-r1664.diff b/SOPE/sope-patchset-r1664.diff index dd6e4e7b9..ab76f055a 100644 --- a/SOPE/sope-patchset-r1664.diff +++ b/SOPE/sope-patchset-r1664.diff @@ -5638,7 +5638,15 @@ Index: sope-core/NGExtensions/ChangeLog =================================================================== --- sope-core/NGExtensions/ChangeLog (revision 1664) +++ sope-core/NGExtensions/ChangeLog (working copy) -@@ -1,3 +1,8 @@ +@@ -1,3 +1,16 @@ ++2010-07-16 Wolfgang Sourdeau ++ ++ * NGBase64Coding.m (-dataByDecodingBase64) ++ (-stringByDecodingBase64, -stringByEncodingBase64): make use of ++ -[NSString lengthOfBytesUsingEncoding: NSISOLatin1StringEncoding] ++ rather than -[... cStringLength] to avoid a crash within GNUstep. ++ The latter is deprecated anyway... ++ +2010-01-30 Wolfgang Sourdeau + + * NGRuleEngine.subproj/NGRuleModel.m (-candidateRulesForKey:): @@ -5647,6 +5655,40 @@ Index: sope-core/NGExtensions/ChangeLog 2009-03-24 Wolfgang Sourdeau * NGQuotedPrintableCoding.m: encode '_' as '=5F', so that it is not +Index: sope-core/NGExtensions/NGBase64Coding.m +=================================================================== +--- sope-core/NGExtensions/NGBase64Coding.m (revision 1664) ++++ sope-core/NGExtensions/NGBase64Coding.m (working copy) +@@ -53,7 +53,7 @@ + size_t destLength = -1; + char *dest, *src; + +- if ((len = [self cStringLength]) == 0) ++ if ((len = [self lengthOfBytesUsingEncoding: NSISOLatin1StringEncoding]) == 0) + return @""; + + destSize = (len + 2) / 3 * 4; // 3:4 conversion ratio +@@ -91,7 +91,7 @@ + + if (StringClass == Nil) StringClass = [NSString class]; + +- if ((len = [self cStringLength]) == 0) ++ if ((len = [self lengthOfBytesUsingEncoding: NSISOLatin1StringEncoding]) == 0) + return @""; + + destSize = (len / 4 + 1) * 3 + 1; +@@ -135,9 +135,9 @@ + + if (StringClass == Nil) StringClass = [NSString class]; + +- if ((len = [self cStringLength]) == 0) ++ if ((len = [self lengthOfBytesUsingEncoding: NSISOLatin1StringEncoding]) == 0) + return [NSData data]; +- ++ + destSize = (len / 4 + 1) * 3 + 1; + dest = malloc(destSize + 1); + Index: sope-core/NGExtensions/NGRuleEngine.subproj/NGRuleModel.m =================================================================== --- sope-core/NGExtensions/NGRuleEngine.subproj/NGRuleModel.m (revision 1664) From e6d77925362940313b83f5e5afa0a051c754d019 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Tue, 20 Jul 2010 17:00:22 +0000 Subject: [PATCH 14/23] Updated the documentation and NEWS file in preparation for the release. Monotone-Parent: 1d776c3766bf2049490ce720a4ffc09f3e604e5c Monotone-Revision: 2093fd32a32150f9c5060bac5619eea2dbc2f08d Monotone-Author: ludovic@Sophos.ca Monotone-Date: 2010-07-20T17:00:22 Monotone-Branch: ca.inverse.sogo --- Documentation/SOGo Installation Guide.odt | Bin 146599 -> 146505 bytes NEWS | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Documentation/SOGo Installation Guide.odt b/Documentation/SOGo Installation Guide.odt index 3372a8c70e7e8a3a6a86cd714938daa7adaee6a4..f6a8e96201aff328088e36504bf461594d9eaa23 100644 GIT binary patch delta 36951 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 az<`kBi9*r<-Ls5P7*LckNQw4vfd2u%@m4PY delta 37188 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 Date: Tue, 20 Jul 2010 17:30:54 +0000 Subject: [PATCH 15/23] Fixed the print button from the mail module + updated NEWS file Monotone-Parent: 2093fd32a32150f9c5060bac5619eea2dbc2f08d Monotone-Revision: 8c3f435e214cb69b7980be52ef28c9a08c8f6385 Monotone-Author: ludovic@Sophos.ca Monotone-Date: 2010-07-20T17:30:54 Monotone-Branch: ca.inverse.sogo --- NEWS | 3 +++ UI/WebServerResources/MailerUI.js | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index ea45e1c59..47c5c81f9 100644 --- a/NEWS +++ b/NEWS @@ -22,6 +22,9 @@ display - added the ability to specify a time range when requesting a time slot suggestion +- added live-loading support in the webmail interface with caching support +- updated CKEditor and improved its integration with the current user + language for automatic spell checking support - added support for displaying photos from contacts - added a Ukrainian translation - updated the Czech translation diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index 7bf01f642..b887f4934 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -448,7 +448,8 @@ function deleteMessageWithDelay(url, id, mailbox, messageId) { } function onPrintCurrentMessage(event) { - var rowIds = $("messageList").getSelectedRowsId(); + var messageList = $("messageListBody").down("TBODY"); + var rowIds = messageList.getSelectedNodes(); if (rowIds.length == 0) { window.alert(_("Please select a message to print.")); } From 3d698d0f91ec0f79d92b0030a637d449d075c38c Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 20 Jul 2010 18:46:08 +0000 Subject: [PATCH 16/23] Monotone-Parent: 2093fd32a32150f9c5060bac5619eea2dbc2f08d Monotone-Revision: 6a3c0d744d66748f11759bba747978f5e50b85d5 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-20T18:46:08 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 5 ++++ UI/Contacts/UIxContactFoldersView.m | 36 ----------------------------- 2 files changed, 5 insertions(+), 36 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0c19e1db1..8a968aa3a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-07-20 Wolfgang Sourdeau + + * UI/Contacts/UIxContactFoldersView.m (_subFoldersFromFolder:): + removed unused method. + 2010-07-16 Wolfgang Sourdeau * UI/Contacts/UIxContactEditor.m (-photosURL): copy of the method diff --git a/UI/Contacts/UIxContactFoldersView.m b/UI/Contacts/UIxContactFoldersView.m index 525a7044a..d1dc583aa 100644 --- a/UI/Contacts/UIxContactFoldersView.m +++ b/UI/Contacts/UIxContactFoldersView.m @@ -246,42 +246,6 @@ return result; } -- (NSArray *) _subFoldersFromFolder: (SOGoParentFolder *) parentFolder -{ - NSMutableArray *folders; - NSEnumerator *subfolders; - SOGoGCSFolder *subfolder; - NSString *folderName; - NSMutableDictionary *currentDictionary; - SoSecurityManager *securityManager; - - securityManager = [SoSecurityManager sharedSecurityManager]; - - folders = [NSMutableArray array]; - - subfolders = [[parentFolder subFolders] objectEnumerator]; - while ((subfolder = [subfolders nextObject])) - { - if (![securityManager validatePermission: SOGoPerm_AccessObject - onObject: subfolder inContext: context]) - { - folderName = [NSString stringWithFormat: @"/%@/%@", - [parentFolder nameInContainer], - [subfolder nameInContainer]]; - currentDictionary - = [NSMutableDictionary dictionaryWithCapacity: 3]; - [currentDictionary setObject: [subfolder displayName] - forKey: @"displayName"]; - [currentDictionary setObject: folderName forKey: @"name"]; - [currentDictionary setObject: [subfolder folderType] - forKey: @"type"]; - [folders addObject: currentDictionary]; - } - } - - return folders; -} - - (void) checkDefaultModulePreference { SOGoUserDefaults *ud; From 1585f25c2b950d8d99116f4b9ab92836b2924aec Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 20 Jul 2010 18:50:12 +0000 Subject: [PATCH 17/23] Monotone-Parent: 6a3c0d744d66748f11759bba747978f5e50b85d5 Monotone-Revision: 6c3973de5dad3f2478a806c7eb196f3a1a7d66a8 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-20T18:50:12 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 4 ++++ SoObjects/SOGo/SOGoUserFolder.m | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8a968aa3a..ba867bdc1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2010-07-20 Wolfgang Sourdeau + * SoObjects/SOGo/SOGoUserFolder.m (_subFoldersFromFolder:): we + need to validate the current user's access to the listed folders + again because of the recent changes on SOGoParentFolder. + * UI/Contacts/UIxContactFoldersView.m (_subFoldersFromFolder:): removed unused method. diff --git a/SoObjects/SOGo/SOGoUserFolder.m b/SoObjects/SOGo/SOGoUserFolder.m index e029e2c94..072ebb7b0 100644 --- a/SoObjects/SOGo/SOGoUserFolder.m +++ b/SoObjects/SOGo/SOGoUserFolder.m @@ -27,6 +27,7 @@ #import #import +#import #import #import #import @@ -147,18 +148,27 @@ NSMutableArray *folders; NSEnumerator *subfolders; SOGoFolder *currentFolder; - NSString *folderName; + NSString *folderName, *folderOwner; Class subfolderClass; NSMutableDictionary *currentDictionary; + SoSecurityManager *securityManager; folders = [NSMutableArray array]; + folderOwner = [parentFolder ownerInContext: context]; + securityManager = [SoSecurityManager sharedSecurityManager]; + subfolderClass = [[parentFolder class] subFolderClass]; subfolders = [[parentFolder subFolders] objectEnumerator]; while ((currentFolder = [subfolders nextObject])) { - if ([currentFolder isMemberOfClass: subfolderClass]) + if (![securityManager validatePermission: SOGoPerm_AccessObject + onObject: currentFolder + inContext: context] + && [[currentFolder ownerInContext: context] + isEqualToString: folderOwner] + && [currentFolder isMemberOfClass: subfolderClass]) { folderName = [NSString stringWithFormat: @"/%@/%@", [parentFolder nameInContainer], From f1258d4bc7c9b2f7f821ed9de3d2eff62f870637 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 21 Jul 2010 00:20:30 +0000 Subject: [PATCH 18/23] Small fix to the DnD code for contacts and small French translation fix for the "Tentative" status Monotone-Parent: 82a45236051a8825c5786369ead73de38b7f5183 Monotone-Revision: 9db82412ca8b860c427e66329c7aad43fc24aea4 Monotone-Author: ludovic@Sophos.ca Monotone-Date: 2010-07-21T00:20:30 Monotone-Branch: ca.inverse.sogo --- UI/Common/UIxFolderActions.m | 2 +- UI/Contacts/UIxContactFoldersView.m | 2 +- UI/Contacts/UIxContactsUserFolders.m | 2 +- UI/MailPartViewers/French.lproj/Localizable.strings | 2 +- UI/Scheduler/French.lproj/Localizable.strings | 4 ++-- UI/WebServerResources/ContactsUI.js | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/UI/Common/UIxFolderActions.m b/UI/Common/UIxFolderActions.m index 7878f19cf..e8e0fe5bc 100644 --- a/UI/Common/UIxFolderActions.m +++ b/UI/Common/UIxFolderActions.m @@ -1,6 +1,6 @@ /* UIxFolderActions.m - this file is part of SOGo * - * Copyright (C) 2007 Inverse inc. + * Copyright (C) 2007-2010 Inverse inc. * * Author: Wolfgang Sourdeau * diff --git a/UI/Contacts/UIxContactFoldersView.m b/UI/Contacts/UIxContactFoldersView.m index d1dc583aa..040b6b207 100644 --- a/UI/Contacts/UIxContactFoldersView.m +++ b/UI/Contacts/UIxContactFoldersView.m @@ -1,6 +1,6 @@ /* UIxContactFoldersView.m - this file is part of SOGo * - * Copyright (C) 2006-2009 Inverse inc. + * Copyright (C) 2006-2010 Inverse inc. * * Author: Wolfgang Sourdeau * diff --git a/UI/Contacts/UIxContactsUserFolders.m b/UI/Contacts/UIxContactsUserFolders.m index a7485b210..1ff941edf 100644 --- a/UI/Contacts/UIxContactsUserFolders.m +++ b/UI/Contacts/UIxContactsUserFolders.m @@ -1,6 +1,6 @@ /* UIxContactsUserFolders.m - this file is part of SOGo * - * Copyright (C) 2007 Inverse inc. + * Copyright (C) 2007-2010 Inverse inc. * * Author: Wolfgang Sourdeau * diff --git a/UI/MailPartViewers/French.lproj/Localizable.strings b/UI/MailPartViewers/French.lproj/Localizable.strings index bbd27b084..3baf88240 100644 --- a/UI/MailPartViewers/French.lproj/Localizable.strings +++ b/UI/MailPartViewers/French.lproj/Localizable.strings @@ -22,7 +22,7 @@ request_info = "vous invite à une réunion."; "Update status" = "Intégrer les modifications"; Accept = "Accepter"; Decline = "Decliner"; -Tentative = "Tentative"; +Tentative = "Tentatif"; "Delegate ..." = "Déléguer ..."; "Delegated to" = "Délégué à"; "Update status in calendar" = "Mettre l'agenda à jour"; diff --git a/UI/Scheduler/French.lproj/Localizable.strings b/UI/Scheduler/French.lproj/Localizable.strings index 210a9ea2a..1b461afb4 100644 --- a/UI/Scheduler/French.lproj/Localizable.strings +++ b/UI/Scheduler/French.lproj/Localizable.strings @@ -318,7 +318,7 @@ /* status type */ "status_" = "Non-spécifié"; "status_NOT-SPECIFIED" = "Non spécifié"; -"status_TENTATIVE" = "Tentative"; +"status_TENTATIVE" = "Tentatif"; "status_CONFIRMED" = "Confirmé"; "status_CANCELLED" = "Annulé"; "status_NEEDS-ACTION" = "En attente"; @@ -470,7 +470,7 @@ validate_endbeforestart = "La date de fin est avant la date de début."; "Needs action" = "En attente"; "Accepted" = "Accepté"; "Declined" = "Décliné"; -"Tentative" = "Tentative"; +"Tentative" = "Tentatif"; "Free" = "Libre"; "Busy" = "Occupé"; diff --git a/UI/WebServerResources/ContactsUI.js b/UI/WebServerResources/ContactsUI.js index aded2c8fe..b8942ddc7 100644 --- a/UI/WebServerResources/ContactsUI.js +++ b/UI/WebServerResources/ContactsUI.js @@ -1311,7 +1311,7 @@ function dropSelectedContacts (action, toId) { } } var fromId = $(selectedFolders[0]).id; - if (!currentFolderIsRemote () || action != "move") { + if (!currentFolderIsRemote () && fromId.substring(1) != toId) { var url = ApplicationBaseURL + fromId + "/" + action + "?folder=" + toId + "&uid=" + contactIds.join("&uid="); From 1e3ef762ae10d8ca7bffb2f96b9dc6fcae50e212 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 21 Jul 2010 12:34:54 +0000 Subject: [PATCH 19/23] Bumped version number to 1.3.0 Monotone-Parent: 3147ad3a58e41e30a98c3efa7f7da7421d6aed2a Monotone-Revision: ecdfad20a3a685ba0b1388b494449fd50453adfb Monotone-Author: ludovic@Sophos.ca Monotone-Date: 2010-07-21T12:34:54 Monotone-Branch: ca.inverse.sogo --- Main/Version | 2 +- UI/MainUI/Version | 2 +- Version | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Main/Version b/Main/Version index de0c80cf1..c0ad2d6e6 100644 --- a/Main/Version +++ b/Main/Version @@ -1,6 +1,6 @@ # Version file -SUBMINOR_VERSION:=2 +SUBMINOR_VERSION:=0 # v0.9.32 requires libSOGo v0.9.57 # v0.9.24 requires libWEExtensions v4.5.67 diff --git a/UI/MainUI/Version b/UI/MainUI/Version index 73946baab..051efa3c5 100644 --- a/UI/MainUI/Version +++ b/UI/MainUI/Version @@ -1,5 +1,5 @@ # Version file -SUBMINOR_VERSION:=2 +SUBMINOR_VERSION:=0 # v0.9.1 requires Main v0.9.59 diff --git a/Version b/Version index 557a1fae4..508b69a9a 100644 --- a/Version +++ b/Version @@ -3,4 +3,4 @@ # of the executable. MAJOR_VERSION=1 -MINOR_VERSION=2 +MINOR_VERSION=3 From 4307be07a251e2ddc052ec7a947d7212a1bb98f4 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 21 Jul 2010 13:17:28 +0000 Subject: [PATCH 20/23] Updated the documentation for the release. Monotone-Parent: ecdfad20a3a685ba0b1388b494449fd50453adfb Monotone-Revision: 027083e4ddfcc14898e7dd8b6e08c73058f18778 Monotone-Author: ludovic@Sophos.ca Monotone-Date: 2010-07-21T13:17:28 Monotone-Branch: ca.inverse.sogo Monotone-Tag: SOGo_v1.3.0 --- Documentation/SOGo Installation Guide.odt | Bin 146505 -> 146636 bytes .../SOGo Mobile Devices Configuration.odt | Bin 21371 -> 21266 bytes ...SOGo Mozilla Thunderbird Configuration.odt | Bin 21719 -> 21610 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Documentation/SOGo Installation Guide.odt b/Documentation/SOGo Installation Guide.odt index f6a8e96201aff328088e36504bf461594d9eaa23..ac252874936fd9aefa9af8926fd154d641f5f974 100644 GIT binary patch delta 37096 zcmagFb95)c*C!m?wv&l%+qP|M;^Z6Kwr$%J+qNgRvGaR&pWT1n-M7!FuG?32>z?jD zw?ADq{t7kq1_iGu0}6%)1Ox>HK+>BA03Cs2y+N=%h6L`Y3m8vUd+_aS%m7L1#z~jc}Nq>9uwELmw)QwIP zD~B#$4`QhA<_bgw(&NP69_4JZaZ&Lof_t7!TNILePE6L#0KuKtP#O5zbNUgB0F}mA zB(f(OW!p^Ycrv}vSE2cOpU)|E_hvbSB{pE$ zMO>eumw9W5w9cZ_(sBix7>@Q+W#cp)pN{NeEN2@*>hw!L_=-|mG^8A+S5XEMs^~=B ze;Eh}=mZ!D=zr!E3JU5!IpzJw{ND#`nsgB`5@6E#P%@RWJ+IEcqHL0+R;l#y~pivFB&#eZ4N!&P%&^1u;`gCb{&{akNd%3q{MoN$!dQ!o0 zQtNf03V2UGLD>b{pBn$<=Bw_*zh^L7NxNGg>Z(rjHTTj4Y~HW4UQE8y0;vIdZp?h& zWcKi$`TXB4r-Z%j(GBo6djxo}Lib;r0qR-uWy@Ag=WjvUUq?s9;(g+<>_w*|sJjJa zv`r)Uu}R=9UM>16v#}myjkSn*%V|gQ;(XT@5b&_;gB1{nK~q?FjG7=gE@Pil?LvsZ z;@Ygt1a?YG`gn}@9mg|VZB}ndzb@XXN5BEezv+G0fvFeUMl;%|a#wa=cp0>*!F!45 zDe2O-i-B=a4|XWwEpK&uAQbTKAw?IV?vRnvU`l|A0K|uf#I)O1T_+C>r(wv3@9WSM z+3KX)n~Zo|lXX1bl?3>&sVVQ2v}IaBRfw23w*x1OfbhAwli0yGOGsy@&&l);_Sz^e zkLs`@AVDCBs~ClrHgNNC4z?K(-2A8PP<|IsUflM&*Cbs6TkdicMg%8o?J_LzF_dic zyd! zQSRvyB3wS%c|*e0)T03+oE;h&I&j$Hw=-6_fsK}h7TIKZiD&+)7MqwD?(z#%@Snzdefji#mV^)G_RC)57G7#eAjX|oT0TN-)7dVG%d9MAnj^4$IjZ^ zvsb2YWPRWle>$ga)#;-X-UewZ1je1rMn58)JxDn6`p69XW2fC|_IoIoAh%v!0&~|p zz>Zwgmk7N=ak?vzb*{8lFs#2V*Mx88KC+q~R@=V2pU1EWI1%D736DA_e2OnEAl|l{ z)fj9NOBABB2U;~eti-70$UctIyLH^9z(tBirpv}AH5ELKLm!_w^lrUHj%a1%=}Or& z7r+S04%tL>R5We0N*k_{QCdfb%5(ezuto8ryvPh=l_!f^=sU%L6=BDj4|Xmwb>~#9 zn>PqEiSO(n+z=!fT2WS@x`hak`1eQELz)t*Qz2UV=-|Lmz>7zK8Gd`BH8S?7v#B%T5QKtS>?rSR!INftO zWqcFt**t6g(fKa%(|K3EkXTl4>#(k=ITZgW@7JEakinS5xA3dDP3cwSyklw#mO@1M zIMOT>ntc%JPJG?>qF?Px8DskSeHLRCUlhv43^Ln5cSsm}M)*~ciy2xzvAFrxw&4@1 zBL`so+0p50dU<1*+_HX0J|%JnY$vf&ua@Vc5j)@ObSNxwXE%Yiw;|v{0?l@NZ-T(v zs^eb0OXIAaL^nX%nTk{_UlG!%fN&3;2va}FEc~4JIj_c<~Iq)Heqttt!8Sv-c z?uIL0r;Gq@Y5n8RP4n05@T@o`t-7tXKOlDhR)fA-%VE`pC13r?7?*}mt7#!g960@2 z%Paz|?&+yIU z6m!efC2)Dyd-^Ba(tEYn{0k`$ZMRe>P?;%RSbb#b)Lv3y%Y`4p86N>r4~8ENv@&KE zVVPu*>a^a?0cQ^@35pYo1iVZ(wX_LzOU(R;HasoHd1(=?Yf*{=z|mx#TohFL_s^Al z!gBJ!v5M@M#INlw5{W}G>Ym4Eleygy7B%N64{7dY@@fdEnJw}CtQN~eBIg6MLYD%L zz5V!)$Y82>On|}>!^K~Uw8Rg4-Wc2aF)Ur5q=Pod&q>pnf+KtE^$jl|+nGLg@aa~c zAhEi=Hx$4Zg7U>SASo4kwGYL!qX#oBFRp!SC$~A9N3o=b&giXp@$Zqrl$+_Xc~h1_ zoTWxuxEF&OkhMc0?hy*STL>&)P5=CkXvSJ9~8D!i^B3B$ntCgtd%PHgf9Awods*w{O0@qvjmC5b~V(c4WY`?Gjw8vkW?4TIEy zjibB6Nx=WnW*~|7; z@jJ2WRn6DtU{Q&ujZtG)M!^i_@O_nrclqUxIE#2j1BF1jjy~eVr=s`ronpT4pbhiP zsoDW$ISZD0cKQ(Pen6f)YlVXfp$q=gcfSG4k%a(yhbQs#p_#Ey3uz6A#CEUgj#2#` zNwhE;(5Xtd>q)?#rTj;{u3DKnZUJ5PjjlCZR)8nl9eR1icvs}{>*4sHU&%(G6A*-2*LqtsZ&*?G$!B{XdTq&&t@jG2 z$3^_=y@)oN8=&u2L8x+$e%(5P^pIYJOM`vDMUqpn<$PNhZGA@95yz#+=`F*->gAk1 zk(E}yFD~<{aqkl^5#AHBlyJMg0r0^iAt~14?0P`AAtWu>kwyJ{2#%pb{k$u3DdNx2 zzOD|$AK@wW2*Y%+ew#gN{{vF5S*i?Tc53l>kB$ksS;#p7Tt>*1@zagp zvmlltV%o&!DN`NCZl(=6q@=OhdzTadq5-Dt>^Zf4QkRy!jWRo}r~DY320K1{1^*UHt0H;r!4kNhB~Z{mj)J%)w8$1->J24Nmodb>JQ|^6lzK8`*qvV zmgICcuH2liI}!i={o>Xw2C+a(_I^zi-V7;&)SeYb=IF2px$Z-@-a5xmK%k>&ok}}l zud!=`fpWpl(>XO@v7xSX4>dBS%0o*so8#IgoU8L-+T-QCHU4N?YWnY+yd@IIV59N-&T=w?G}69ttS@O+4rmJdOvdPRC>KkDr(q8 z)*d$ct71s2xHn6Co|e6CN#F8afJ`^H3^@QmjdW!`Wk?*0k84kJ>ymL-XvXdxD`~V> z&!QV5Wk?3g&z>(#m8j~eTE8SnCby08Y510XF{S=)8-tgq$*h>GxBiK6a1j^{j{2?b zELRRv-=xs4iDmi~%#%Fk-KJU2jM=aHsqhSqNpI8uoky{EX5a8jB9%w7uT&xewL}Ym zEGFNF+2`*S4RUhota^LD9>Y zoT*%8ZOQ#0Vy%wSKuamo@)DdggJV#4Cg{z;_qv#Itl)IBZ?G1%j#Nj%lgKwX;p!u| zt|T@ymXDw3wgbBt#La*S<;Tm{P?H~!mCK!!aK()I2Rrs#$iNSGv zl;`@((|(^9GdTY1$+u(F7na8$e-+pVnkHOcNskl1hN#wy{l%n!1+ zWK?m!GbhF?7Zn>$P>UOm;;R=PMNF-ia)g&P46gtA-b-)F|J@ni@$sAZVSF`Ys(hgj z$ackVh9rXRIdM%NWmCqOfiUAGaZN`2q=)P|F~O4|f=|MBhAM*XAM^huZ~4F21OD4V z%m0sq-~Sf}|80+dL*CFs)|xh?&(HjiOpBiKmbxS-eb7hoj$O-ELAkj8|C9s%w*t?) zjIpwc_IQ~7BmbjN_+N>jeEz3UN7-7} z*oQg%T)3v;Kjp3TUt^)<@fnGByBa zz7hMcH2ilcv1{Fwk;}ZArQ-_gWRK#s&2o1lw}6wl`>cU(gy0I{knQ$JL`S42~S4D;cIlGf0!LX@nlBvo(5wWF!qB%r2iB&LpBo zqk!C~k1fl3o)wqZlcN677|4#t^(8mRyZI7fyY6sr4!Ws|`n{*cUc_CjM66o(zX%d2gbtK=tC+BZ1uKMZuN!C#=18?J@yyCzb&a(My>~-pjt9s!agLZKa8S z;HMBRRlS4>C&il{<724>q|ee}>U(6yJ|H;cw)j-vbBY9O1V{-8zb??o)z7N0HScWI z%j9XcCWr%Z3vrJE>&d#wE7_@6(!EkGe6?(X+4VcDY z(2!H-@o2iu(G~E1@cNSXckIM?_%|@e7U4QD@Dc)CJB0lh9qA(+s+%&?9!Xg5c2+Rn zfck@v$&r>Dz&u#QW9xouJiM!b30U=Ip9ewZt*HO@{c+TtkRSKPXC_AGEg$FwJzj-l z5B-o~UWpwJE3<Docv^7YsUC=;x zb*2l%5$3hJb4y0-QFIwGzIcRx{>)tvW*)pGiv-xH7$jrg%2zQJC6Bz#3({u3QeZO7 zGX1nufDha-Hj8+0909=t)~*h?mrN;5{AM%A#X=rE_kX_Dw+tU1$|M`!@t%(Ehr$Qa zI~?dkZKGAC0-g6?hF4|p#OaQIX>x~W>}X0if&9YTK}-SSdj`S%yRt5ngro#D0R(g{ z1HHj1iI3GQ`H`DyiN&R!XA&XNkt%u5ObNvYB1bo=Wbe3V^(_1a=*P8!>^(nv29gKi zoEEMCZP!BaR~ZmfR;RYC(9WSuNS$b9|}K~sT{IrASPsuCgdunv>e zYDEK|b^AX=sy06BF9QZk<(f`t&)2hcP>XRBVJRtD651Xa^hye%$OVvdl^GMz;9Ks;$sB^ve%7na z>ds8ZbLsQ-6|KJt6aSq7MeFQ53R-nmZPIU8Ax7+&@i~>1_|;aMI1183?-LzUi;1S| z!{{U*JeOwvPS7GC$4;)-x%Zs7G%trfZW z<4VA^18^w1PJ4N-hC@}!wA1*WXEXDu$U?O{-4mMqk57wzptw3%Pfu?blRfao{><@) zFey!9Zy!Gcr--`hSHKI9r@!@MM#cjXj@J79)#y!kM}fnyBIJkFofC2MRxa}s#+&!1 z1FH99a2pYrv;alcMrB(r`Gq(AC@4<}+y_8rhpm6qD_%dtY3W}%X2*X8m2R(phE?2| zaRDe#n>Z0Cl)@LN21}{{vCL(8^4)K9kLsRJdl1A&UW+R-E&DirDGl$prhFEt!QYFf zCC{vy_ob<9k1a1%@W$az9Asq{v(I$*Wcmfdhvs{f85WWL1}wEbxmW(K!z|mS=57EI z#!#gz*u8T(*M4h2+lqXm*xYj5r|4=HZPeu^C=0322PyHd_)Mp4 zsKfcy=(=dzNoUUSpCrK{axj+F;Ngzvy4$99jMQ!nG!XxbvE$?3B$`oUG!P`cfj1Fj(2(EZt2QggiU4Q~q$+q}+c^&qiVyufu>Z5+VT-@qiCsq!yf|j8g+&;3%frbyFVfv%2Yl^oock{Yoe1>+2XdM>6Y)k9L%&g8VF>d&yrnGVLN30 zDN0~yf^&I@ePd0z3heo?M5_fv;%;OU!6HOp!R>+d-2N3{Tl}Z;Vnd&l{(Gyh;JH}z z)^yi)^?NTx4Twkjw7&sFv7F64fMI*2r*XJz{HumA-489;VR_*|ModY6*o4OVd7Un+w zHHa}T@ripBC`-HYx3%i~pFXCE4Z)_&t7rQ;{tsL6bR`YB;a$}h^c*?r+zM7?)0>_i z6PX@O=GNU>d~`ds2<#uuZa^raF7);7OoUpx4r;hDZ$PZ^j2lsR7BMMz7Tm}*0{vLW zslBJ11mcdksWAZHB|-SNF&8P|)Z_?7=7z*XP{`eK1&H|EITk*{#mMPeLyz6vZD1Z! z6Xe23j?5I^aqfxA3H=@P9Zqb4caF5?Vn#7&(cps62^!%maBv z5XJ4xc<08|B$4xWbEXV=4I1Fj*0CntA37y59B2bsdt`vTG~ST7i9d-Jh%#u_O9s+B zazuQbzomKDEry-2p-yzXazIs2Mj9mJ*PmBrXL-AeOQ0W4D>fX7?Zc$zxu`1Bi%?=u zDvgSzD^GrxjO3(fjn$@20R!O4+d#)Xm*yG}0^i4szqfEkn;bRQpKzwD>O}xN7tFqL zAgVAHCpdr~biWWksO|X%yDuW0#Yl&gvehH*HZUU58Dw1yZI$NQFFm3bm@VDiZ;%6$ z@FhyFi$hGDT>46!Z;)a8>pwlYZ%O@gw7uwuD6Mv0M(@Eb!$r}3)KLUI?rc{z#U~I3O`D+e>IOoF+zfY~+`t=d)gis0^159}iT_v#pmkKCh zI?KND!5<&&_}0`ssGhhNY4AO*VT2#L0Lvtw=>8l#Wk{uRy> z1Q6{8$08*=^**9}+~t+Sz)r0VbJm7@R>ib7ZmKdMe?s)`ng#a!2(glYw(e!Ra0>uP ziA$jNPbn>SOf`1@-5do?hemQER=EeM>A)>$J^#wXTqrCFiYKd=u-ufzi+(K&-JNA! zw9w?~f!4rtnDwLCr$Brl8?O(c*P-CXDk`_Vdg!k1#7$PmnlB4On}hw>WtJJr>*oEn zO~r**6zI@BRcA3q%>eAVOV4(>dln!@oQH1zxH3Tnzz;lp1NiDQJ@`#M^7do~j=dMd zar`|U;^g$OUXHu#`(uNFuZ*x<%MpFyaOVu*?qk<4=#Sh{Hgl-h^WR-?D5jUcBFZA5 z4=Zb%ueOGKfjASQ_&F>+KRKAM&bPACwcCkm{k%N?^=n(bDj^lib9u_$^$Jk*R+J^s zVSazqC}`m{T;q08?&<299cfpSEmIps&JnAoDK>%f|jJ8l~XV6skvNLPtihU#J-H8vKW`nDt zupw7cebY?0HHlQyt!r6crU%e@ex&9~Cn9DA^3zU|cIm~O|hV^nZFwsZ7J zb-^*)rKJY#Iw63r{N+5R_O6UTQl@^OfKN~*V)9SL>249z=&||tmwkZB5QNd+F5TJ7 zIEBooA}=1gyEaO3+Umhq4Mi;ba-uN1M-(Ne)hSl~9h{#|3`xMYeA&FMtBTRm zG;~p`zmhY!V?-r94^)a}V0B9>xRB-+nXI7Jor_{(OrlkRX&kAZ`Hbu$`s)#j-QBh7gVR zjAK>`Rm`xR`t*p=EC&C!d=$UeyeP07nNRu2(2Eg;MJZ)WxIYQtXoJ(=t7?(cnjIWK?J%nh=WiUTcb6IKJZ$kU9bB(%wMoB|2~-cDGW9Mv1H9rR7;04 zL*ByAw48btAa9V;7olT^9zAFcb})Q(EO1r7xtQ514gLb?vdzqI@Ghi+n-p$t6#HZC z&zd`t3}c1!;5uTbOEXOAJ0ma&Dsis|NNkmEL_s}fR>^9FGJ6*)7=n5xNto@uzZX7R zBK;fHdw9s~?rD(T1^6xqQ=0Z!H_3+hH;fY-?;i6jDSW-QnhFG zV5X2~SOrzYS$yU%*V)@^20pM}zYZaVJg$ZZ%|2j%!|izW$?dw4#t9lTiK?Kz=<0dBo6 zBqx#J5U4KXf--RPbHHp?Iu{jEtz@@KOqjVHJGNQ?m8Z~hq%_aLt{2>ruA;)O8*2nd zs)Z`xcz6-6!L7Y?Od`GWylZ73>nC<^UgKV%F;+HDO-UQ%{+ImlDK8-PH{4KF#7#Dx zdPNLsxZ@d4;zs10IPxnJzfW`~WKjARDNPQkj1x7= zqZ$bft$j?^!v$W$x*r-cfJ4GykBux9519v`6iiVrYN}N_3f0R`Xbf>!t}(pDg&msN ziX&Uar~fcYs=ZP$8zD0+Yq}l8WHCM|Ao0KjrW64TUL1L62uk~K4ZjjzCW!8|tjH!! z9qZQenNaevo<4(ahCzt#BAS^htP~1I3fe(4o~agb#Ic$M!q05OPIyPDXp`U~>go(2 z)>kT1FGB9kC2o?|)yPktKcb8^^>lWChalDj@-n&1%c+4;X;+F*T+F ztFji2FVpOHZ4edQJRYxC_K{+x4p%vxq6APS2#c%wkD3`)T8`;rIg$@UUQzjXX#WZW zova{?6|>d9jY={Urw$f@-Huv(mLvpJA7z@e%47wAY$&;ou_Q|X-@uwgaC#8WlMSJT z1i9YtJEDXqbBy+$3gb-qXLI~|DDMCX%m~LRfF;*)?hK9Sw;=XC-=9?`Pr@!2DBWJy z)NJ_!FSaad6vulc0bYN>JxGWpc!pa|f)KsQ7FvHYWL=Ui{g)P`Pi?1sOk5L?$pIs6 z4}=*eu(m@6&< z^gtHB`>UMcIRa}y=_C0D8gC33sUieEBTBc4jH0npcj^64H&-eM3l1U(cS<{vKulJ? z!1*L+1oz4Wa>wDE8yCz-`OX0VcOX5>&0rZ8#WBu!k}|1mRu*j{f#4ASM$R@2j!={} zph0CThnHIzY5%W6DJbqKY21-duq!W#lB+@S*ew3?+q5?*83fWwq5qe_C-dE)1OFZH zIXlZ8CVqt(VmvkNMq`zwU|G*j4>*~+;h>p53o4%zI(Cb~iiFebVFe@L3-fu=0`(W% zkVc0oMM1m7R+QKrhH*ciM2Z3vVYckn0ueBezg;+{(k-`GcDq>-@?_>~vIdhB^=C4> z{U~%{YgcA_n~)ezAemf`thMt1TTUnDeCLXsCl#?y)dco3W<&%F{Xwng?Z_OVIdc&l z@%CYC7*cZh9R|(gbDVR1+zus%*b`pUYRPuT52(b62b+>j8r#z zMeo9o668%SoiZ(|7$$ziJof7%^Wh6MPmWJF_R^n?WiGiUE}~u-3NVJ|6@~)L9`w|IIeEvP_OQ_f0a-z^EPu)<3_e7HjZ^raV;kvI2+DG&Bwh z3!)X@@f_n%pa?EN{Lny_9|1fE672+TEN%}vT$Q*B^OW5w0b|hS$O7S(|LgS`qYhOb z0^s`!1yGIAX#q=26h8WeQTny%SZf>%bDM;uiscL@H4huV+$!pZc~9t%54A&jM0{s& zagHb2MJ3wjO`na`OkoJio(i!)MnDE0oU+*~JDYM0>{tV^Xus|!fGU*Q2@w2v+ui>W z14m{h9=nm7g`5k(6Uj!(eWkg2p|d1*_G=$(wUH5F=`N_zC8XRV-F(EmM{hq+Bxk{6 z&T4M~bILz&n2%ySq_NX`f2lJfC-Oqp8E#6viCUn7!MS^;ZgzZBQ9YpHLSk}q{ZNb; z0@oWeZ%YSs)CNNjp`v23a@TlO1}1#_cTY{As{pSfKs=f3`qs+G?ZtR_Op!?CiQ^o| zZF^3f8QFmeB@CUWLxRGqpqM);$M_6M@0_`q?0N8=ltW86mWswn71x%-hKN=9ThP3b zm_L}#4|~TWb)-HWqC_gQ5gK%?d&(D!pVTrHhrH_OKX_aGVI%2%4Mp=5SNIke(-pkh*l3? zZeFP>E&@wewiHwu`-DrpN*GC7SF;`h9I;}AUju^dLqwH`Wj;GUPkCCX_1rT58lVHE zp4;;uflFcd8|D}HHtRfwvUD_=ZQ+p5ITRsf0%^UNY>3;YsQVye#IUL1%KF_3i#ksT zsR;CAnpr?^_w5pSeq8#aazE*n2ZiBJ_oShLc$&)~yN>LkTu<*rORzxS+mOWA^cSV= zB$oK{11T)A$VT_rZTPO$ksg>hfC?g%+#u1m(;t?n3@%5xOdx0+Yu~YH1y)j=kuF;} z9YZ-gxjeKOLcer6=9oV)!YO@TPjXg5cq&;|rC4e{+Wk5F2N&jS@W_k4a(%g$502V2 z_SJ1ssy2genS=|TMWP!`e$2*(3lxlNdUw!+!R+Sv(gcPbb56hV&vNv{$)RLU-wm14uWOY3S2JkzwILJqNIu$l3{lj!w z+YP_pJ1UMH_>2DGrZzSTRAA?x4_k}_^v7DJM|jE~X_yv9N}MzRNkS17Tu=Wz$ZU$M zh$Q)#r;>68m@QEc73p(`bp+*MBa~&*jEgLmc*4tH#GI7#UNNMBtp@(EY+8*15V`2b#U=jp&;!WgRlz9DO&~ zgDRoSfxR7(6JZKKl4T;P9q{UL_*OC>dA|}u>FMrdqF7?qh&KsKeL#nek)RhuOe442 ze~fFnAhR{bC!P|hq_MM?b9K9|vytO05Q9z0un=?%+=7ioN&tqoV7-<2Vy+&}PB`!Sn=nwY9IAWB%UVFQDZl6P?gJAq3uhwiuy# z)OrBEm=-1&i|ogWH{`*fszHTgeIJr4PQKP4R*7U~ogGcr_QAQ;E#OK6P9yu)K#|f% z3qBAKRd)e2MAGR7nzyx#zB)4!TvWen??b4c(80#f_;IdVrDs9!M zx5ohoE28Fb6GsAb(@fVedhT#LB1B`dAk+*z96pS@j3$ZUyc<@wbieA0Ty52McDHr5 zJMq3<`DaMF_?J`P(D66Jn? z{@fQ8vYp!?rwVo0Qtwg)LWI66p>iA3=iUGmUxZ+4$){CWo029j#OJ=$5+}NuNtIK@xrSps z5e8&WjhV7Y+G;VMFZr0sYJ8Ir23D*vot%-SyVjE-&}j!0QwO=ar|Zs=+4 zzFpCsef+3gDh!#HF&lF=PqsV~zBH zT+KqyQtVJ0pltov<3d!$S27QrDM$*Hp}v6+XdJDA?-2tTN>uQ<&rY;{5XiODA208f z*bs2$ocop%-{WVWR4W8U^-KmhA-F^vsU6}}{VL!xNFnRL{L7?fDyA}sa#}>oNjymu z-dEfK{y=OcN7Av)_6oWTYD7$EI5r?D8=k7s_&2{5hwTyFcuE_()JfIBH5TW}zDQE( zH4tTHy7+X>96>2G(o3oGukdU^%ERk3C=ksd?x`k*Fb^0AgL}j zYab=mCGDfeW>(k+kgLHTk%*VETM+I(cvEf~TRlN!coYRfR@p35-vKAV|%Oac- z*z*u9?Qf%Vzz54sChJS>5t>>Yn>3zMAD-Cw2V%p^eqYy`#KPAVDy2HNiKH4 zsa&E>HHgtsDpww(K9LB|1kO#?KW5(X>t*hbxwe*AVqW|p>6{yO7cEfuEc^}=dYuN; z*_!#XfLKXP-|wr#}7 z(`+*&wBa{hzUA~#1bH3etM89J47%f?TDWxIehuL>?#_J9ppe2np(A7@`4TN;|MEBK z*l7ocNkt59Q?WnxK7_nJn-#EFor*=7XI=gK%ih@=kDnBvWZkm5l=h)C@_UvL==?hp z{S($x`eNF?ZJy7bHSY8(`t<@u=V&MA{qy=VmYR1hPKdhUX1mv&Ad=r;%i}mkjBsGJ ztL^sRzqj9@NL5Y}5K+%U4TS@W6^#9?BM4bWN;E@^wwoT5I&S%?!Z?v<;=?Zp_0x(n z%?-X`*x9FmSeJ2g_kSB*q&3+s6uOVH%q2=;#>Oo3LzOp|@8yMr_?y>cD>{!<$)`Iw z7Be3yyxF6?9E_Tm6+`=D%RfC;747XUd)$~Y5bNn+z~kYu>mel^P^QW!r%gX?kz6EL zGgQQlvwdbShUWJ*jj$5K_ zH860L#tk_5EufvyVCl$CmvFDl+dR>hseIr7l@te}%QzAtqPVtFqQvOw^n%N!s%Zf+ z+iqZswhIcORr=;8H_r=+iR0BG8TKL38nx^OunP0{!LO~CpFxnN*YMLIPZSs77 zD%Z{IfN2gNqs)02wmyg)Vv~^RF~fsG4h;QG4 zV0)q172io2_QIM+b=FSS;Qi<2J_8>Q3zt#AyMKe6Md)8Ylk%=>>x#2ix$vBUU4!#D z1=|bULzfBno4Q$t`gH$qP;1B6?M&?W0s}w)(~#MbtZd|OHQEQb!Deb9m(ZgdT=H9KsA@dTDZi-dVdfb%xNdEL zit1lMJBmu){M>pcuE1Y4>w)-V`+Z`vDKx|P1{TxT;|2z>Q)7bV7o+PNqNPLo3@G@^ zDS8ehVVgFk}Pa+($ghPV`&}Ok3;xmU| z*EnVw?^fQ}vs_LTbzqf)SxfTK+44BS8qAhepJf>VOc z3diLb$waG_QNk-O%U~fgPWeTonluq^r187_+809X7eAs6Mba8S&h3LgTz#mON z0w(ir_Ytr`=mnq2h?z&hGopF8C-`hP@48WnNq|`lFIH8V^x%zWZ4=@ z7pg1?L3$ucp+Gnna0*x>Tvd($UMi7`s?HRiLkAuL2eno(4baI^;r*BT9E432=Yv$7 zY1wC_L6t|f;zQW6X{pfdIM=eH(X$QmqN1%ojf)aahv*jhKDu>TH!KT_86i*;Xj`|T zp)JvH;=$H0VkGpFfjO|5^nA8VhgdUx@O50wJ8SU^pW2LBM1eAuj{HSL|r_2g(l{JP>mkw7(*k5?k|fZfpiXhl3|3laaf zi;bc%oL(SbkB$1$M8!ttF13D&(P~8Fz{g-qMD4}Q4s+9Nio17_o2M3MHFu0uUFyCP zyP*ZF;%o4hoM$y_a6ebaG} zjq}jv3jgk~$5w3@trGIffgqkl1IHOtPqGLcR)`CvMY_K*WvkpT7;#eyHapye$h1;) zxDUorQq>X_bTV27UW;%N^XtfRc?+nf@ct}|RBhgjvRK;)09B+CLmOFT!utG+Mqa&X z?Q#kk7Ci_nn(-L2kp_I2E27fwXT87@T-dv3nS4vf z{Y2uI0^F591)jhF?WBXYYw->xkJC$yuy z^i^7~r4q763M6v0`xR?V>r)ovdW(56Vi$eeBn!&&y*)i7&~MkDi`(1F=R@;f1(6~- zudD-Q?ElVHz}z{@;ndbN|k1O_zs(a3{(P9rO9US zDeZ`bta=bUttJ#JtyIWaMJwclAfk&tqj&^L>X?tD%Y_iV2fIvNaC0h06CA5_qM(>)gmxD=w_NPwQ;m(`C$(? z>2Sn%fplm~=*X=$sQtOj*T+_*$L!E4U8SmhdxI_wgXJ-1vaSA@A!*^^LevGfe&dmo zXp#a+R*|@{)+v1khz0jL=6RnaZ#W#ps}-3RkV%k_-zaPIhQI&WBM{HX_IT zs!ERhc0)lGgH;QnjsROnh1!sLfZXT+EI@8}HvMZ!kQ>bI{xe0E{lB}kXOSJY>2vMo zIH_nh^Yz>s2TagQX@2iJAq;NB+o7qV7I2PJyZr^fJQ(t()h#<;i6Agqy3wqA|FG1S z_r{!9ZD~`&zMDmzBdJpiUjx~&Ya$?l<}c*XH03~V5ZsD94^_mk;2k!-AO7gDPQEMEzM}?G}}lTO86Cpm4@m@tP2w35?PV%U;_hfW1nK%RQ!h z6~F1OO38&j-bkr~NSK^4aBJ#LwAghC_4Cp7HL<#4(Y79n1v%`oxnsCpA#_RR?|Kj{ zgsIP6#p+7>IL~F0MO!YWC3^+LE@{%ZWEe^h0qEQjjzQMzlhA%a@J&hs|*$f&V+ZGYg$&UL1TrW3;NTI2gi~$FW@Hr2MZidTy>y5 z9!@zI>8_UDhf9I=HUj}JY)b=oT2&Mig{Tna$38a!GpNB9nfFzpPEj$Ee6FSAFXF z_f*{#e~Nq8E3!Vc2dI_9udY!~kO1xqr8$PVgc{Yy6pRIk$cT#`_hL_xQ$$K{bjI^H z@!UYLVSg!F8<`034^%~5e=n?1wGC>?DHs$Q#(JWXg)h1%D#9ig7Q12y_#w48*2{Xx z2UPGnwK1}Uups&)Q-MC!Zc+_bHL!vnL5hlQ^gTi^RWmco_59)E4+8!dcpj;Dv-oXX zVh*?yWkwN9ORz(BArPk-*&YQxBcQ248t+zsRID8e^9lM8L+sQFnptn zB$&i^G#Vd3KV+(SHQXt0fK3hN@3LG;RK0`xG>Lw~sZ%hd6~1+d#Aim><@t6vQ>9Vj zs_cMFLwUIY)j-2wJzz#D^WX(M4D11_G1{Dq`&7X4`2hGa71Nfv^q~(w!JlZ~3K3Bx zn^k-!mbkFO3`uAvf42yauy5bc1_C3Ujm&WZLrSp3sVNXy74lHbJTi}Ap@7L~#C!rR z6GYUHE&Ddx)}+W*^OU!`}8yF*?GHk#lb%Osx z`871gwo6@K#08kaYQ0gGc9egfctXs@22Q{I4c+qcj(I(*d%=vG@9tt7MG~Xn8ss^i z+X?I*f$966FF=g45Q;*|dXZ%L5-_S^o#>tQJ_I0-f5+UFO+JZ#C*M=F8V>^r^Ej03 zE2T&x=)dMY7vw=4UKrbG7+(4t-}^E%zEi@<9X$_Q&w!e9;AIBLo`wRlXMzBx^%uaK zAt)aFlM}Rbvjtow(ntYZ7%>rjjVbJI1UizeE$b5rU94m+;X$E63Cbh79&q9EifZqNh*aL9st(FVYjzCL(`tPq0v0lKTQ=>p92 z6GY>R`nimxZxY#%@B#Fnp9S0NO7F2rR{DO3O+4?+Phr-DHcs_?U^f72r&AQcH3s68;h=GeX3co6*J)NoSx_|ve* zsyIVJVAIJHv#dF6BwUgIWEeBMGghmyU$c7{|0o4(QG-bXf}^J zOQ_qU1-I@*Q^Q87&Epox`tB`pW0V(Z?y(s}Cb{FT1LIYq9;(nCRYSQ9f1>e{>ml^3 zQtwCe;EhM4F1aA}cB7NdOt%tzfQsR!aR+M}jjgaAkXky|Z4F*Ll#MHs`fy5Smaq#Z zr9@D&Nh}ZSk?k;F)r6K~&b^=8W42WGP!+b;VBB%f50TPVpblcb6y z%b(5@Q`*=-TB(;tym!8UfA!-CE7A^CQyJ{LSif2;ti85+bwWufB88NO&>KV_D+4xzW^%>F)j^7Cl%2$1|~?Y*gvU|BK3Qwf9BPVqk5-t(l|Lj znQvZ=zb;e=!gO{r36Z3+>R!xwMcw zd_44A{(%yQk}vbntR@mn7ATq?1OFJUX}%Vgj2BInPC0i57)LoAJvoDJ340Aw3yOJ8 zL?h$MQ&sd$3agFK1Bv;r!$%iTF+q6n?ysd*k*`&B=iAGJ8zJ9T3QcW*c8RJ(MKs1A z-`*w(8$}Iie@HLdP*I znOK_0r=o$S6aKA~9*Q!JOpcfUX820u1o0@(1{wB@{L8|b;eA}B)7DGh%0ucEz zdx~44M%I#mW6jm2xpPtU!u8;zVnuo44iC$TI=mKHr`OyZGS?19MlcG;8;^=mm!}zp zBxDKSf9q^Jd@s9~yt&*>-puDGZ{~KCH**}baGB|DaZKKl z$*V{~$nvPjQM#RBt&zXptk)aO<4&iWYQS&jG~gdatRt6ZindtX(}KMfjo-3+0hux7 zGuXC(>2lbTsnJ!fqa__Y9rucfho?bOA(>1-UCN~yS|XeV)EYqIK$o-5{XRow;i ze|G`gvaAbF2mzRY>B0y3qdbk;8x_fnD$B_8d38jLF7Vh9Omj@yfArll-h;q>bR0hDJ zy~TRiY6kiHZ+{cOz!dAa5B1~8Q{Bzvsq!$aWJMrBk9Tm9h4BkR_%tnl4w-P@Pl!q{ zkyy>K;T>FMaazSej)X6kq7&`?nc`DPHj2{mDHgzXaDmHFX|?4-*HaQf$&ZOGf9;*1 zJ_T2?1Y6K7a69y-x09YM#w18l@X>WjYJFDfno|%+){+rHs7Xhfs@@`MSD`&Si1w)y zuXJ;Evd%)PJ^Q55uGdfMjZPWy=t28F{^oNgG?9!MosL|dJAD5Bb5{$`D zb;ru1$mQNKM6`3$xy2_Rb%_h;f7+}cH|m{s^Q0{A%kt|eatJ=XyI7##HpakEc{D?Y zb>TZ?D?Y!t%IH}t+xg=6&Bjr;lWq)Jb1QP7!v@Q1HS4W>wyKo*=j1Or>=R00FZjNr zl@{B2+|d_rzm(MH`El9ll8Z|}A(wSQe7hFny>TvTqTQ%skiDpW%f720!)hQL#$BN6IA74Uglt)1o{b4Z5HXPUCXrrKrjIQeT z#;)om;Y6sJzmGKYoIdP3_yT9`dDd*+6$m8ImgSi>51>dC>Gw&sSTGFq_>eu=Sb9^I zP|i|#PG3XP@3!bltS|K>E@YRibn?~n`Vs4S-H7!Ky@>T)u*=s=e{YS6!h~q6yL$^< zr*^B(%bqZL0dXRCJnX0_+i!vt-fneT-Q~p@N;fVPRhHA*H1Co!Ki`bHkS1RkI4Lcs zH#Q{{Sxnj~J%tsbzJZ6jQC7rXeS_TLwp4?FpTVvCM7;_gN-Gvyd}TS2_U>dAT|*A; z%dP2UY66Tt>LV*pe-pWWh|sBGSQ@^n(&m{1#+D)Rx(#7mR27aT<+iO4QiJzl@f49a z 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 BA&CG0 delta 37033 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%0D%@#_Dj-= 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 delta 18236 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 Vv~IaM(BvE-G!X%`QNn3;{~ys?4Fv!I diff --git a/Documentation/SOGo Mozilla Thunderbird Configuration.odt b/Documentation/SOGo Mozilla Thunderbird Configuration.odt index ea8fd6499bd67f3683132151c30bc5d025c7d58b..5b1f09394868192ea2fcdd179d745e349327a963 100644 GIT binary patch delta 18476 zcmY)UV{k4^7c>gTwzFf~wrzXIww)_Bc5K_WZQHi(U$71_m zO#+zX|HonZzqzr>|6lGkF!%pz)F46s!#WUrz^2otc*^Z3x?YCdL=B3RQi81%Hq|Ak zV*%adisl1pqmE7u`5Y-SutgCL(zK23@>f6q)usG$&yD?5>5Gt#F&iqWO`R|=K7rsOQ zfD_tOk(7AaJ3!X?Z8FcjLSbriFapw}=<{gA`HTgj{*`a>(9S*g2hoJ9o6Y zQ^mN~ou2>5mdAKgTc6)bfQ9YFJ1lZ`!)>HRP__3{v*r3rXtcW?tbzi2wh)|>e@My8 zxr1f;@ydiTZQAU6T}Z!T+`z-fhc~YkK-MR;PEVsMTRmVvXcUlm-d`tx+tv~>=Be{m zSBrRMsVz6Af}31a3Nu&_P>NzKcil5)1nd@YG{p*`LS58c{rwL11v+6QNQIw|PVZY_7@vNCH)*tVgVFN~T<&Yheib?{STzE3iF4tkCo{ z>;W%yC=8wLFM*X}gD;^tsEob~h93H&$9~?Ko=#ztk<581@?!-#Uc`73dgVhI`M!7; z>Q0PK`AAgByVp3?)SQexB(Xc=&Y2x!0Evuz4j)5uj9G`@OuTSha*bs}Q$2GHVy3iAePcDdryc3U= z1~SKtc39zkCe?ydI=0uYLwADRM#~vI;RbRizC+iyJDW|^2$f@0uVI8xEpdqMsP2-Z z2jf6@*yoy&CwV|U;3E|QjjKi@I~(~J`(Ih+%7FU08D1aFxg3#3a?_KX+8pg!;_6#b z^aWQrW!vUGiL~zRqwJyg971btYaBsql1cZ_Sg@dO8Itf%u+BDZs;MY=9m&R=OI=d; z((V2f=4Gpoe(KSF{!=mfc^zmkR{3+Kxn9?9Hrmq$K{MU^h=X;&Qnx=Ome68q&iS*l z^i$e)ooVV{h@NCcPcUi|TA~ugM9S-7BRId4zd#mhh-$3qUJ6Vz*Y}(m{s3@!YOidw zD+1VTi9=5X5n7nX*&+~k`zd3(3O}VkAi-{oi||x)mEEkq|2**NR*=j9I0OE_$)UO- zuksm?Lic<2SYnF+{~gaouSv6hf*`H4`dGiv(ZO!oS~_N*El~ZO(#pR^efUv`FRtFi z1UsjP%f_>}4d`)3r=c9&7*v!jXE?uD_F}KnX zc0JaJv8;a7s1E#qx}!7t2CpC9b3%!8A%-gm3b0Ptu!JzQ|c`+FPNI$ zs-G(f=!rWZ%Xu~1C99$Prni($!YCwmjgU10#Wycsm}pmBU^;=F+T>M+4pM4gyOp`S?01| zKo{PZhoAr$IQpbxuP%8|d(bd(AD61%-iw4OMSAZpkzQ%=&aUQ!Pey{{;4j0vf^HIx zhDAHV{q?zgk_aKjk_Jw`#p=Pt>#QA<#Rd30(+ZfwqTXH(R`0;FleW++ zY8M3mwNIdb+$2zGWadDJ>;U4ME1CL3>)@w*6^|q%6k?i$G+tTRQ%DX;0_l(v`6#Y0 zbHlV5fPc$K>&+bzMJipd45C{zd&N>ksFDY$>XwiW-f4|MA%5xvqrGd&iosw=?SV6EB>FOA}-ZM6S(j2t3fHe{NfXiIhu6W(0J&B_awHyLsLD%M*GPa+1u zTDOuA0pcKiqD)8{VInY$26=^uMrocU=hX>MRbMo~9uxZmr*2oZj!A+&Gs#f)gso2HDKdMA+u)K8uvcAbwTYZT& z8Umq=0t?}ed$n=RzGI8l6zYz5WUT^-lGe6kTV`Gy*3dmGLR{(M2VdV6-}oAs$E_pniH0#%D3OjkROHxO2dYM~Ww&e^UKEHTeZxSh9UQD+pd_SE28l4u&f`5`1 zp+V!kAbxn$DdOB*XX%aQ7IL0kdBJ3elqnSnzX+EcS}3Q5jP%eIC~l=I5|*1Yn6Q^F z(SBb3GIyFln16bEk9L1|@BalvNF+h{zKpT%S-;r^53bPsi6Z_0Cb-I?<7>QoY#hyG zDrW{t6()-pXBj4*7JOUO4W><{1(J2croGV>Di5Jb+2olWpE!3r2z*5|EtY`zVj#dZk3Si!6<$t+hnN3SuE}lG$ix2ngmaQRXpz*BoRW;Wxy#*o& zToAw`VkW=U0bH7TtA<`zs2yAJ0aN@v_yqhy;3f&Hu+!s+m*b9}(PrsXBiOnw1P)Z4 zOkq4U;-HA-iUEw-m|s9keI=OlwGuc+-MT<*K%1tVUss)S;3)v723Cfz+7s9yx|!Za zzgR;&UKV1`hV%6(s#!&BEoJ&{{Tqxl{Gd<`*mge>RKGpd*`Lj@JY5G+MAKK7uxnNX zIK+$`)bMCm{~pkA?`*-Rg{;3c-O`dBTYYsAa5x z-U8e!`}?3b;BiQ6ehQ4LSxR=n-Bl30COQfvlx!N(d{#nGEfFMtDSq-PjR@pPsQaI( zL(49?$K%Py>qic#6EiJka=m3vQ0yb_(#bqmobirX&LDvO@ruKI=f?9)gHn+SEaGZj zIQH(|S58byQj?fUbS$YD2AdCLCOqQc&1O(mf&1Zj?y{3}ISK?r4dr_)Qb|Flz~eW_ zYmHZH=tK{rz^elVCeaSZjK?ZM81vnh$Ba+Lhakwy#PfnCX>N=*E@1gs=vj^hAq=n7 z=fu^IC=no91{AldhmQRhRWKo@#2?a=f|2+6WOP8hot@?oVZ7fGRe8qruk;J;xfyI< zlibPUA8$Fy!db!2I_x<6HC+tGtb}0`Y0u>`Ojc4Y#Y7Y?GdU|n9PxHDU2AC3QBs~h zBIT(js}iy<6JUjP$vWXd8ENxFmnNg8Xjt5C6@0+!21sS}y?=YM0ZD8jXjW@8ErVbT zsw+MLe9g>cKjp3d0uuk74*qbG#L+u@yW<9`Oq39%xh1V<8DxHM@?2>r#SFI_rSoyr z8GE>PcY#yL)H{1eR2Q;+ytGa9=O0RvlNXQ@P`k0v&uwg5Hw)!dU$>k?HB3Q=l72@J zGhu*A0O&!AI2Lt28;+Exu{)`$;QGt*qg06fzDKS5STVy#>NT*ho?% z+L_YI?5 zIJY3`QKqr2<{FaB0N7GfFMb9&`7!D=wG(i4aj?-ff+OjGtm$R7Vhr8eAKJFDC2Smc z$#ruYOdNH*HDzFjj~t050?XP@N0S3Q1ssuj6Z@li*9BBkpE#{2hy20-cvsjh;Fj8_ zP6JT@#f6tNmu9fw7~2y(?Zn2os#E--RUV4nn=Nga3n!eDqqD~bw7xx zl{8h0ygAnvNU0Vmb4h-;c{Gda;l|7YnPm>S9Adj6mP)TY150nX=6^ClG|UOw%I5CW zexjNyjkoB`iUk^z@vNHIiuu-UN|g>>2A*;Al=91s9exsQkw#_5rAosPj(BZeT6#yJUurAWeGh?4Q zXbDzwO`N99HV?X%KX~?-eW^FmkLkI+9%>s_rzC9wPW`B&5c_18G(vu*bzqZkvrHM< zf!u_8CY_m^4i)RoO1~r(3{g@4d~pAefx~@M#tfBIcJ62ks0yzucD}|x4?77;x&coG z+M)8T;JDX4Rl9^tR{@qTqaf*+WA)f1b-abR0-fMNbNfI4h!9)~s{TB{e75%fYr7j* zwN=JqASoWV3v#(;$L>LKQs22R!vq2;BNJcKM1UkJbcRqwriWNv&KS0IThEj&+U;Q1 z^a@jpWFTyS5tC)-PC{GByU1p74(-*w;0!>4{y^lkrDJvPZvk8@SHSr%k@J$^bT~RO65{CfGjLd*O)n@2lUHBu^+b@Z3-q!b3k5If`DAQ+v_uRbS$1z;W+8rUKR+M483UYUZVEFTpn6(j<7+VvIAk0MTycWhpGMps*JzAdjpCgVRxiN=&(^9 zxyT#GpiqZB)_0cI>n@X7ky^84M`ZmOkjL@}} z6gQ{37Xv0h(DJb!i9;$kXv{ZgOQsUo)xa|t?Z9YPHnR) zho~D_xbp+SRvyG64#^GWS@TAXD&g=Yww{20TL2N;MW2ZqlnlHA??|~8@!t$$kKR1N zQ{q9@S`{Y?BcUWaQ=h06L^(EF;CvH*{I~rB^lCmt7` zPOb~u5_>}2`JxN|w>(hCFrH#g2xGIw@trU@;FyAMJl5`^s_U+EYhiE_DDEEQpp|L! z1pu*)?`HA0;os0t;_es&SMna%11Z5=I!M7BAH_O*B%rJNB)FTsx+TAc(KgA9CWsTR>^>JZa?pl6OTd&=GYrk!iMe^Wuz|Z|2}XjUuXy>BB#u7z zTX+tknbNwe6i@WCXdhqdbRi5g%Fn?E?zoQON5G$dmS^rZ2gc2v#;L3~-biE3Ktd%c zi93<*TE$5Ra+-*Jh^bV>yN=f$W~8Z{)Z0@|`9%GW#qqaND~aOlTas^C({p4c(|{oy zAsx>3t$z?DwbQ0G=RzDs&KdIyjE6AJ83O3Y9YsYbil#*aXHcDc)ZJ1F{hfi!^iUqz z5kPSaGZx$Q3ry4;8PrNpjxJEk&^CL2CKCIur)98jF_;K3UD zOii%CyaEFHxb!70zJ{ava{63$kO4@`p0Z^I9oY&#sRudS_j~c18^5WKGO{LLWAjCm zZ;plc@B0s1LxiILz#n5=Z1L1)ksD?EJF-mKdL$vzzruRb+)njH zOfn#Y>g0=#)_W^S{p%kr5IQgm*2FoE;SQg3m{BKNVWa5kxwXk@FZzkDLIiX`Pn@Jk ztL!fTM~JSI$ra0vBZx@&&*SaH%LqB*aO+3p+U#XLLQmVc=LRg?8*#qW&coXqE~nZUk&rf=?#2h&O#OE^&a-?Y=@x9T(=17Dy7@ZoQ@97PYwS0gCVtb%z1-wq+KS(k=YZ9t+s<5 z6 zbrO{nGZ9Rk>lnyn|Fh+0>P+%>=3YsSOu}fiW2V#2ofDyIgtb-omH}uvk#Zt~Wt`(+ z*qSDiOan`oBmlf*5q`%Qhcd2O8CA#u(T}z$WJPb}LMHdTZF&~j>$b_%J|Rx8{@B46;uL& zIn(Y>jBmuDQCRG4vnvQ_eKHEFPp%8{PhcV* z-8jR@Jo(~jplqWoM+^s&C*z%jw~ck46MKUHZ^@6eEOD3R+c#+nNnZ&BR_u}&kSt#B zsr0?4@4ttSf@R~b^9%?3RI8WvEvjYO%qdGcUUu^KrHz}H3Z6^bLcK%JRy=i;+kO?m zX2yY26QDM&woJ=P=SmCl)mC~u=`{swJtS6(bgxorMaQVE1;>H{gc!k7=nY>ytWhaxgu-R z*Xdz*_=odI#Ba^}#Rag$v$eT<8IyBYH;Ndx@8RL&z_`Wp7T4=t^CAGDV_X{N&007+ z3K+Ew_cr0kKiM1b>m#f$2Khan{gtcnvAmq^6)*F9f7D;I&t!tI;)VR1jdNG9ghFJ# zQ|&0~EytdA5E*uA4PIh>gdnizo@iGlXh>JlhFi&kfZt9t-e`R5)$fq`cJEM%9F)Nl z!GSq8W`&;$3((MCvF@Hmpeq3u3nd%YJhYm0{BA5#jSLw5 zOQmC#$QegpASmU+zGXO|_ks(iSqF<>$Dwfr>D}-zq1ZV!z90)JUICLNHLs6nSZ3)x zSfZSyZ#&*BPQ2tN4+R+p@;(~uhp@alv*=3=uV^&(?|?@zRtr6z!y228O*Su&13Z0lJcxw=rI^T{t>bMuaJ#Pmmrfnf<_3}X3b zDfYFQa?-OE2Z|vSb6g57$B#B{Vnz~vijz!bdR3@%X+6Wj)^S2ardlZG3vZv_#%SL@ z#1;{Cfws|#iKU)wke_X4%e}$?+*tbfo#qal^_+(~MjI)9;zFsVatq`#8K7fe>}}mm zV{q?2d)Fsf^WC^sRe>>l@L#mC)V2~Y#A_3=>t z)x0W=*OJpUcE^wY505sCMW;KCc%C8-CaZsRn?gX-+nKkn5g}@_ntr}89b;_|98khv@B+9N?ALA9M4oIop_N6!?G^r+@pIO*0^^N8Mms6_L2{D0mZW zkUOeN))ALFeHh0Jg~`SI!Iz_+e;XOUFEVET$qi)n(qAnuFbf|m5WC1;)l(&@HXain zMc%H})m$)BzQU9A-5;vm8zD)w69HKg-F?dB5}!JGjN)!cZ1{r@1n|5?&9OQRF28OxEKV^cF#ly6Pr5l?@{L9gG@#Sr!O&sdbzU_cJtg}Flll%!ec(h` zDcl1lR?!nNjb_OG6>5}VK>yxC!jJT-vHwrLC>q#uu>!tUf8RAn-9@?k30Sb#23>=g zel4Hxv(;i+xqBWd0K3u2rH*$Vd3x-L%+=yLI^TrQ zj~qPdIE_G&=ucYL`sb-2o8Jtz@{JkQ23G2!O0X#+YsXZ~F)PzzpyIa$QuGd4?tS;^ zK2Pr?S@yPDMLg6@{emjWKteH!!%?T<0Rge30|EX2vt_9NlP&X}jDRRS0RaJ_fdB!) z{fCXsgfPJW3xfxUr~xSB&h;)Chq4DN)uoOH5!vR5qQWTFkw^YZ@kas|_D_=?ZSjQA z%7kL$rLJFl_5R>>YdCJ0GH;!?h?`?x1EjEtZ;l7@*%2Ye0?-2<-<Q*bEAkt2e&PpGuN~N;+%~J4q1G6Go$0NLx|8516M@iI)E&`qaTrk15E@k#e9M_ z<*pDpGwv+l%0g$KF*!(;wF%88R{iw<&Y*!WB|%iQbEKVDC|o*q!-vW7YSkr^fwkScQ|u z*17Q?uTK>!SQG0GjF9So6BLG4U2+K3u?h)Ag2@PbFcWjnxTkI-0Ghc^`8z&nXIV6d zUeqm#czs3Q^^0%_hZ{ITn=jE}RbkYQ^Of{lGq6%SLKEI^yuUHzLd7Jy)B+|IVS1#h)xJ^@# zPLSaQfZ`@2w>r1^_M(qqrb(0?oAX_c%Hb|K(*vpoOU|oo)r7@{X{}?l6x2eC9Ej`z zjO3pae##?i-n~8>+s0z0fB(|3XGh0tJ-VZi+DWZ?i#*%JxEt>9w}%wMgP)F=GdFE6 zR5owgpLoy$szxJ9we((G6O#QUEz37BLGdh`0a#^dZ%h$^mw6muJgD`&IQ@u3YbuxK zU9EoTD$Dm@B+`jj3~Zb`9$HI&K#bW;iPzUM=AVp{GX*e>uH5Aq>US`enRGicSrP-X zrPdUREb+&U^~QmQ-xy&?5Qdl6pX!D+pnoKt-KLzn_;TGiKusqs-nB9h2{%0NDCXhr z05I3Y$S4!(;L_HC3vy=)q*ZUWrC_>P31J4X76woMZ2c#_aZY9(>j?RTKRMCb1^^Y+j)W;TG9r>MqI`uSfBd+I&s zI)s%<7jsNJ08ZoD^U!25^;Pw^b59 zPNUA8OGp$qje@f1!rMn@49D{{C4pYWv2d-Z&U=n&F-$ zVWhzw5-i0^bwLb24kbyUL;Sm#;g1AftR%>U#R0;CrlXoic%ygdEYCeWH^$gurjI+< z;1q%?`wb}`V5FhrIpIDe1{hkI6p_7G1LhYTl$d>QlMO7CXNM#6Z*=v#+-|C0aps#J z2FrdIVR{TxY?2tgO7hjPpf+mzBV{i$=o-4bJhL$BxAU@J75m{pUV_X`{Z+qoJOg-DUH&~?uieHfWSRZ64EJ<0y*%CQ5vdKdhtQ)qYq4qhrQI$^Q%-73U4Z*WaGV?D@0ilp_v3tk0ihRPdpQzX+n0Qx9hNFQe zk+6-5wye0(12So9B5aayUQ1eIX+A_hVif+Gpo&$db?r=%*K(w&y4n$%G&GRHfL`K+ zea~~#b$G`zeWRpsnvqr;=Hm_?C;Lt3?ZRT0S$N6PgcP_%-R$^!k0@<1fB5k1yKX|? z!frwr-Y}0MzE&M@|#|Y-l)tei(hTZceG; zD7+TiFYl8|{xke5Ojc=_lg>#pL2pO($4cj-@6Bsd!1&GRqOMUblc_5*rwv}rQ733Z z2xZwR3k`+sj2By~K)ekBhhE{kco^JKD+%><6iu@KAN_4Ra`VJM7q~wef|YMqpD8z? zlr5ze9bnbcE>|XXRjNSLa#iXAUM4c#*`D9GzOB+(A-IqQb!WHv?nikQ{)sx=>JEpz z#fzxjcfGHKKu0ImYh+$%w9Cu2?C-bUCTS|B>hhD!LrtFvV!z9K|_PYLE)x)U{ty;pBp9*Uj)iX>L&IHD$MdsaNK zwlgzk8cBEaxl6l~>)N=+>}4Q**b0Yw-ht1Zg$FabwK~W$W1~w}X9G)LgRGfRT2_mP z3SdXf!hF?N_U#QUdvtBvi5DUR2G2CVZp6f#*oU6%tF0N_l^gsGv^1FdGf<>0W;)F1 zA~|14iq)jsn3b>p$GC&CA*Qf|nfe{-v4Zq{-FMktbE%er+C8U3{#e;raGJ09G)(`m z>#jC65NK9UMfTjT3Ez0ijvCO|B081(BoG(}qi!ED(e@>XLBXD(4zWjFrJ zEK56E-_uukR_FRIuvrfkO)!f83Lr9Dm!=ZeTUAs*6`34z%6nH z|K(T5rTa;4{)njcaqff2{Zl8uAP$*-BQl6XmCLqAQW;VyZEx!l6lcS+pk=vmj=959 z4$NFD?*Ay+M7d}pK=apSc~7v->QSSCvaN{aG3u?#Rk<;4Ey_s3PhpU|1+eriCWA#R zuc$>cA6l_b&Wl&^&E#4#b1jLr9UX!^TNmp;f898EcC&8i@_WVTb$`W}A;1%jF^fR5 z+DFvoq_v(|Q*i@()A23N+Q$aoUb{fC-GK_PXj@n%;X#x`<5bX~=LdVxoknk`lyZfZSKvET)?qrYo#g(f zMmAFiVp?1jv>t(?1Hj`4i8thw$BcS6;58i&wwekgIfHBFTBaDApi`Z!}wI-$JH`9-iOFK_e`u@ab zN#LE<{^p%0k}jy+$yKJ%i|_RU4vuUbfjy9fP35#b@fIZ;0m#I^)^p~)RpkUl@e*Qj zI-bwLNoYEaq0Wb6(FP?pxlyW9t;S-zy6OL%?xvh_!frb2j(VXkrf!|f^#~jfIyEKT z_`yyvs?iMC8zEIu8fmMIcJp^D6VWRUBfmJ0!4l6+O>>$IPvbV)(BKWYUnmZtr3 zlXe~5;YBsWD10kEG{Frie>S5imrOf+pGS+Ii{Y>*H$Yueb6BmZpgyMm^zwMV>;E5( zxuO05go6MCL~r{4Xw3i3FY}URH#$Xt0Rcrc$};AIfN(J<-ZHZQGbNI+(7adg$uyYX;+M2o;avNJ1IvEGi@DVdHb1-uz_OX&DIYB32wTks$5s9Sgc=ioL_RzFh^#wEpF$P6%`rJ&aHrJ zPX59~TBC8)>R0DoaM_@t(Smzv&rW?cx}93kP6O0aKkoQvUT`Tkc(oOByM0#hXq6y4 zTxyBdmmNJf#^JlLO_QBRYq6!^3}AJ1{+MU#W|K~4YixSpKloCr{G|SX@_my?SH1e| z{oCK%6v2&;lIKnB*OkD-jckbAd(YTPmHl&tcGrnW|N9P#Nb{y4z9$Y-dxq)NZ7tu? zL=4FAFU6HwWrB9s7ySX80XUMN>!ry^(#6#gNRS_F`9w;eD+jYKnxH^A_N73|1gBN> z+%NG#JsWpO8;>(ZaZ-5-NEVAoxKHtoppZS*_(hP`mcb<7;3Dq}t|)v1sVf6_-KrM> zAMhRd=9|fq2=Y3^$UD|ToiXsAcBIkcmVkH#F2H%C%H}lmxY-N6><6lTBFI*rskm6L zXR7|E?(qj$4r+xVZjRvVqMYw<8+m4TXefcW0Qm!5B zug$bE8fPlcc+3n&Fl<=xsx?R`^|H+E8b)*XF*5oJj%d9-zfOUdK4bTC=c4x|0N^0v zn*OCQz*~>#b?mA{`zoJ?wiIQg>%);Voz{k$zy{=4!v!%uImtuAIBo9VMtY1nLP=^K z!RotW3)PVP+T88ZyVd{`y3|3Yx4Tl(>t+^Q0a0 zkmOz>*hMyS+YTC|CxNd1LV;Wvi|h)*Ef#zH?ilwEAy;98nYQ%|oZ&z724GV6&CZ9uen$Dvi#Wqya|C5E+ybGkN;kG*Qge=5w+AgYJAi2*m%}mtM_^l-|9|c z2*%CG)<8&x06MtkdzM?6{TWRN@I@DSDp1b6Gd6#9{2uRqZ z7cVKoPjl#eO+5b?8moq`o)(0;y1hTR2OQdYtz+P%@xi+>lWNGGf3cYzX{dhweUI9I zG(Xse#5fd#FFbS)1(YhO2i>pSz;oBa5$5%DQE8b4Ex~|tC3m~PHo+!=NHtQOH ztL>mKQQWcna86Gkc>=dj$(u-BoVmsJLx#0S!d?k1eZ4LI1qfn|oT|2XUC+uAS!ddS zbn@eaC4rVZyQ^ny{9%0b#A&T?q)`pDX_RY)ee=$z=Ya&D5QRTvjsnRy$5$vk9&(JLP zZO7qe$UFw1zDG8Kq+rE@_6RTm^!xtv@l2m2Z zOmhwu)ch0uiU*IQjN5ZX9n;>Oz!9iif4O%2V1_A%8uHI+b#{>v6LC2%UeZ8t0{$Ft zxqOhZ0$i6RxDnvL;;e}>i*)~>R&5Ba&+awE86-DlJYYu%1v$~`@+qeDHgg4B*(E=Z z&ALvhV;1tcA!t>ht$5OUmHuma8@Ob(0{*craAOQg;p_v%G08-{X)8{myDZsMCs(B;4NxoGKkE=cbbcC2S0?ZNtcSS#>E0Nc_= zP0E1mtTTmvI;v{dekgWniq&mbm-8x9ds8``nonPUpu7oKq1vrX8obbipQv`gT%aSi zKHskAEV;MDp4<-JvDHL8`oreRo!gez0i=BS&pkRIrG0jhCt0AW>OoFNV{@-Nh^kuj z-#QR=y+NNP?HL$AaU#f6#xbzh&jM60B@`*9l3biluEIcYBpREnn_!?+UZdeT-Mtak zT6j;dl?{E+=7nC>&fM(er6>A%KGR?S#OgbDMgIH{cJ*RJXT@{|5&+@QonFIO0xHdA7%`+4_+s2N>c3LiML#*^WYY>O6puCvX5jO2iYmIGVY)~1P0x>1 zR<_j)jD)s!tf=%Eq-RWXDMQaLe;7r2UNMrkoKxl4eK*$%@*oZhVbVY0oj2dQ-Nas@ zV>gYVLkb zs*lben=Hy2jC`rGb_%LnsTqE&8!!1aT()x>=`wf+NePcCqR*tu|BOvln?)+h@alh` z`FbuthSNcuYS<%pQYt5<4eUc^w|qBRNVTI#kIAi-l<`#-L;2za4- zd*yPuQn0Pq-;%qOC-8wue>cr0T7Mxa_vbcr-LdyRq_iaFU%282S6PX@_-h2)Ife&s z89uT&&34LHRqgjm%ChO%k2|MCDZ0TK!)YA4pQ}Rvz0=^CRTH*v0FD)3!uR^)6n}!~ zcFZ;^U~}0GFHtGao<%H&;Wq5%T<4XRy@J#WJXPdN0Ws&0a0t=E&GQkefvb!U*+4qAP*~peY8a>*Pt%x9)dOEBXlWCS0?a7NNn;!+31RMkW9lvF6s6!Y_ zQ}*bE?h)@>Zrf09OJS|b?Bs;_d5ZRko^nS0&Bs1 z_;pNL0Ep23)U9l?bG~ceI0zr9=VBX4Yc=tHd5v?}{Bm4Q!Vue19J-sP;t^)<%_&on zRg*{ytVWLdh|^r>qY47@M7%U%a?DAvEp$1%J-1eFRImHdAgS4z%^`7NjRbqujs!d3Vy)nRU{W4OoghVAHRR~sf+k3sw^#IrH1dv~{X$Nj$wa9L z*;{K73l+U0V`g@!$Y{HY+BX=@W}NKZ&9I$HOqlSOa-nyUUB6B6&9RPIrKWoYVEHSE z08J^$=wnreVu2s&ni%EJXCmbmu3{m2g!<4du^-=`rvsUL+=pC)~94 z+yAD#%H?`<+1$tydO}s98)V__R{y-B>YY%CzrX0Anb%w{v;A`4C9)!1H3AE1pRUVq zbN}gc58BXUuV_E9zs>O@vO7{^?=zZu1~lf(m=(L?AG9ZoM=VplXdhw*8%MWZ<1a*_ zQu3}bVrnzOKk-{fQ{J0Q#C3LcIoCQ9PELGMGJ&7Hj(hR^jy1Q{#!|KH$YafnY_?0H zzM5T57gpH5ezPG)D3xl?K7q}Dpud_K9{iDH@#zdGJt~qvo{6uDUpJ9@7x6IK<9Y252Sx;<^|!zFHDtOQ>{`oA9OX=owi+ASWB-zk zYCQr|_fG1WpR823Wew>P2^QS-e1U@<=BvNYZUKWFRp#Gt9lyfp-h%u(J!Br{P67^K|4jx{^s;H@^JGEpis0T2u3Dn%rk zoDy^1i{grhPyFkKyE!>1G0PI{Sq|ER{_&@E<{YbAvGbx#O*VoR1Lq6b@ZJG^oE{MT z!(PFzD^0DIsH5;$dE1UNu)ZAcbCi{{6xvjIQMMt?96vUUDmtA6r#aNcFU>evJu1@LiOt!(?8|HEcWiQocb{ENNXj={62qJO-dB?ipShv+oU@T86-u z3XaS#GFnPY(Ea8$Q5Q;W|K4Scxs9D{NbQ_m$jLOrHNM|yM{cDD0mKC&v*PLqWZILU zBR+4M}OIz6$yJ$zDreOd*Tyv$jK4`?Ie<0W2E7 zh0V2VMSV~y{F`^_;>cR3#^n2Fp0$m)wm3f?v+~gPBLjVa#jdY(p}7QQttcKA>D!A$ zcUmqpaff5pxu8Ugw%y#dSNvm^p4tx-zu?;kP)Ju1uz8+lfULw;aa9Kv)_xTQWV`>@ zRzm^P@+>vmIK_{2P4t&K_>}{ccUh1Xo5NJFZp70(ExQ%<~J z5uKhqfg_VHpq;z`T%^ORxgV;21l7W>6NQYt?!t;krrhlpD)BCektw(iI8&a!9Ig$C zCtYSb`XKOkDFic2n!CFc_tnP#smc*Q<#<`m_APrCVXzNA*pZ5^a6^qlHv+a?$ zvWqW7CWWPBYtate8<}x>DWWIY@>~MpcYYfZnR!DIKaRiJd0O8GqdMxKwg6D@@PD;& zol#9_NjR`HL+>K^NDws;5_%9ZOGhb6fFM$pu1J$7p=m-1A#@>N0K)@9FDeGy1tLKN zsZs?&SbC8jL6q`T7SQK%-r4yx_uM;kf7~B4=gjxr?{YTfnz9lnp7ZnLNOumb@n{L$ zrIoHSQLugvRD1nn@9iLjr(Ft{iiQ}7o%o-5xH+G1h#w}v3MsdZ%j{Iu!7Mx}$MYKy z6CL-idQII|CPf7FF#(e{wU-U8I2Mm(sbyxpBbO5N(|5(8@Jr-@nbuZej$^8+{Zmj)mFMHWx|#%RS{NN_}|0)Lf#?j{jPA z#HR9O0Com>rLNF?{KLHV(78uZb*IWew2w&i)1m4{2hjEx_Hmry z9Bp?!_}QP9g-+!*@~v@$_v9yMGgB`GrjEqU_AwOlL@IFdvUQ0qH!{N3IzM^UV<{hV zh*Nk2pVm=UYh|6KD)pA4C>g#vjGbqHGGAiiCSv+i`$p)HqT{?IddIWje7`yp$-%;i z$Sq%J6g=A#vMuKHrM_DLiepJ{ZNhPT?SihpL4|yO)G-2#1Y3DaDd%9!{9i#Tv_SZO z3`+|+Wr5>$0!0a~O6!=892t|)UA{E$Tivrt4;it-Ip`Kico9B3fBNUO_scV8kg{9#BNGH zxHat*D`V#F(@54c)%ch0RD#Iej7?q2I8VnG+bl``7Rft>RqJN0sF*8lUB!axI z_#nnwJNh;e1$`UGyRS3Rrg5^MEUFtIg@y;H@{*q;$Yzi0H&~t!)2U0rojg_ctIXrB zbIeHx6B_@6;frDk;p~vtxRKXm->{Q>1TZPgE>eHxVrdA#ixv8*;F{V4e53x|NT`ME zyW|sTNV>4WGai}twge-JlQB7p%faJ{AKXHh4D~5l(@W0CR736v#8{!28R$u;HrG(L z$c1+9K&uP(_!6HmFaB@G;1(8IlvIS&}5FH{-YZ%)Y?6`9Iln)RN3@bBnsBnz*rBLkN%ud zj{1$|Ifs~oeG9}MRszKI#ZJ&tUP_I;!TkYE2!agCxoDE><_vyMQJx1OFdpME;sSei z|Drku#0>ZW0}aOFpgY&)PKh(q>Sp|!lh_zQ3T=pjt8U`+99w9y$Tyydh_ex?8s6jN zaA0$Z439evX>XR6_W)B#S$bVuJGZ0Ue0e$;D(*0i(%Pu(mQ_ExNn`#)>|;mRqSgJ# zN#j1tLD6Nm%_*5TmV|{1GpiMFiIqC9RUdJe2FcL`vzDDOMhJ`;nno1MC9Zaz>&=>VXi>3f&cnIIDpezr)u7&=gkFof%-(zv{ z=e{IK%@Xo!9r|-!X!%1CXTws1_khIsi{3~=SSd*VKU(8Hv+<|hB}G_C9>yF6tbl(V zANo`h-Adx>!9BmAt9|%tUybL8%_#x^2QU>p*vA`X%EBrF5CQz`A{UPKm*Yor0Dv?# p5>)+!!rv2)zTE)}^M5vbiR6zyargp>Xh{|mQYjk3v0;7?@Lw`6aYFzA delta 18604 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 OHp7glw$&ZC5$Qj+ZJxFO From 92cbd9f20d0e97f551e13e1477636896bc6ff587 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 21 Jul 2010 13:57:24 +0000 Subject: [PATCH 21/23] Monotone-Parent: 9db82412ca8b860c427e66329c7aad43fc24aea4 Monotone-Revision: 3147ad3a58e41e30a98c3efa7f7da7421d6aed2a Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-21T13:57:24 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 5 +++++ UI/WebServerResources/ContactsUI.js | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index ba867bdc1..64fb4a900 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-07-21 Wolfgang Sourdeau + + * UI/WebServerResources/ContactsUI.js: (dropSelectedContacts): + reenabled copying contacts from system (LDAP) addressbooks. + 2010-07-20 Wolfgang Sourdeau * SoObjects/SOGo/SOGoUserFolder.m (_subFoldersFromFolder:): we diff --git a/UI/WebServerResources/ContactsUI.js b/UI/WebServerResources/ContactsUI.js index b8942ddc7..40cb83ea0 100644 --- a/UI/WebServerResources/ContactsUI.js +++ b/UI/WebServerResources/ContactsUI.js @@ -1272,8 +1272,9 @@ function startDragging (itm, e) { handle.show(); handle.update (count); - if (e.shiftKey || currentFolderIsRemote ()) + if (e.shiftKey || currentFolderIsRemote ()) { handle.addClassName ("copy"); + } } function whileDragging (itm, e) { @@ -1311,7 +1312,8 @@ function dropSelectedContacts (action, toId) { } } var fromId = $(selectedFolders[0]).id; - if (!currentFolderIsRemote () && fromId.substring(1) != toId) { + if ((!currentFolderIsRemote () || action != "move") + && fromId.substring(1) != toId) { var url = ApplicationBaseURL + fromId + "/" + action + "?folder=" + toId + "&uid=" + contactIds.join("&uid="); From b5a8dfae627faf0192354f6e24f25fa35c444e2e Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 21 Jul 2010 16:00:51 +0000 Subject: [PATCH 22/23] Monotone-Parent: 3147ad3a58e41e30a98c3efa7f7da7421d6aed2a Monotone-Revision: 775c77bf29362b522a5e4bc462f291c0cd1f4aaa Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-21T16:00:51 Monotone-Branch: ca.inverse.sogo --- SOPE/NGCards/ChangeLog | 5 +++++ SOPE/NGCards/iCalXMLRenderer.m | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/SOPE/NGCards/ChangeLog b/SOPE/NGCards/ChangeLog index 077183427..e03b9a050 100644 --- a/SOPE/NGCards/ChangeLog +++ b/SOPE/NGCards/ChangeLog @@ -1,3 +1,8 @@ +2010-07-21 Wolfgang Sourdeau + + * iCalXMLRenderer.m (_appendPaddingValues:withTag:intoString:): + fixed a typo causing a crash. + 2010-07-16 Wolfgang Sourdeau * NGVCardPhoto.[hm]: new class module that implement facilities diff --git a/SOPE/NGCards/iCalXMLRenderer.m b/SOPE/NGCards/iCalXMLRenderer.m index 530e582c7..c51c9ec9a 100644 --- a/SOPE/NGCards/iCalXMLRenderer.m +++ b/SOPE/NGCards/iCalXMLRenderer.m @@ -96,7 +96,7 @@ int count; for (count = 0; count < max; count++) - [rendering appendFormat: @"<%@/>"]; + [rendering appendFormat: @"<%@/>", valueTag]; } - (NSString *) _xmlRenderParameter: (NSString *) paramName From eccf14efd0c2e8cddcc78eeec9f656efa476357c Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 22 Jul 2010 15:13:09 +0000 Subject: [PATCH 23/23] See ChangeLog Monotone-Parent: 027083e4ddfcc14898e7dd8b6e08c73058f18778 Monotone-Revision: 1475912d0e20ad5f1180b0921306270039272161 Monotone-Author: ludovic@Sophos.ca Monotone-Date: 2010-07-22T15:13:09 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 6 + Migration/Horde/HordeSignatureConverter.py | 84 +++++ Migration/Horde/PHPDeserializer.py | 135 ++++++++ Migration/Horde/README | 7 + Migration/Horde/TurbaConverter.py | 351 +++++++++++++++++++++ Migration/Horde/config.py.in | 11 + Migration/Horde/signature.py | 48 +++ Migration/Horde/turba.py | 24 ++ 8 files changed, 666 insertions(+) create mode 100644 Migration/Horde/HordeSignatureConverter.py create mode 100644 Migration/Horde/PHPDeserializer.py create mode 100644 Migration/Horde/README create mode 100644 Migration/Horde/TurbaConverter.py create mode 100644 Migration/Horde/config.py.in create mode 100755 Migration/Horde/signature.py create mode 100755 Migration/Horde/turba.py diff --git a/ChangeLog b/ChangeLog index 64fb4a900..9c444503e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2010-07-22 Ludovic Marcotte + + * Added Migration/Horde/* - scripts used to migrate + the address books and email signatures from Horde to + the SOGo database. + 2010-07-21 Wolfgang Sourdeau * UI/WebServerResources/ContactsUI.js: (dropSelectedContacts): diff --git a/Migration/Horde/HordeSignatureConverter.py b/Migration/Horde/HordeSignatureConverter.py new file mode 100644 index 000000000..29040f37a --- /dev/null +++ b/Migration/Horde/HordeSignatureConverter.py @@ -0,0 +1,84 @@ +import PHPDeserializer +import sys + +class HordeSignatureConverter: + def __init__(self, user, domain): + self.user = user + self.domain = domain + self.domainLen = len(domain) + + def fetchSignatures(self, conn): + self.signatures = None + self.conn = conn + self.fetchIdentities() + + return self.signatures + + def fetchIdentities(self): + self.users = {} + + cursor = self.conn.cursor() + if self.user == "ALL": + userClause = "" + else: + userClause = "AND pref_uid = '%s'" % self.user + query = "SELECT pref_uid, pref_value" \ + " FROM horde_prefs" \ + " WHERE pref_scope = 'horde'" \ + " AND pref_name = 'identities'" \ + " %s" % userClause + cursor.execute(query) + + self.signatures = {} + records = cursor.fetchall() + max = len(records) + if max > 0: + for record in records: + user = record[0] + signature = self.decodeSignature(record[1], user) + if signature is None or len(signature.strip()) == 0: + print "No useful signature found for %s" % user + else: + self.signatures[user] = signature + + print "%d useful signature(s) found in %d record(s)" % (len(self.signatures), max) + else: + print "No record found" + + cursor.close() + + def decodeSignature(self, prefs, user): + des = PHPDeserializer.PHPDeserializer(prefs) + identities = des.deserialize() + nbrEntries = len(identities) + signatures = [] + for identity in identities: + fromAddr = identity["from_addr"] + if (len(fromAddr) > self.domainLen + and fromAddr[-self.domainLen:] == self.domain): + if identity.has_key("signature"): + signatures.append(identity["signature"]) + + if len(signatures) > 0: + signature = self.chooseSignature(signatures) + else: + signature = None + + return signature + + def chooseSignature(self, signatures): + biggest = -1 + length = -1 + count = 0 + for signature in signatures: + thisLength = len(signature) + if thisLength > 0 and thisLength > length: + biggest = count + count = count + 1 + + if biggest == -1: + signature = None + else: + signature = signatures[biggest] + + return signature diff --git a/Migration/Horde/PHPDeserializer.py b/Migration/Horde/PHPDeserializer.py new file mode 100644 index 000000000..675b8a7be --- /dev/null +++ b/Migration/Horde/PHPDeserializer.py @@ -0,0 +1,135 @@ +# we perform no validation +class PHPDeserializer: + def __init__(self, string): + self.string = string + if string is None: + self.length = 0 + else: + self.length = len(string) + self.cursor = 0 + + def deserializeInteger(self): + start = self.cursor + + done = False + while not done: + if self.cursor < self.length: + currentChar = self.string[self.cursor] + if currentChar.isdigit(): + self.cursor = self.cursor + 1 + else: + done = True + else: + done = True + + length = self.cursor - start + if length > 0: + dInteger = int(self.string[start:self.cursor]) + else: + dInteger = 0 + + return dInteger + + def deserializeBoolean(self): + start = self.cursor + + if self.cursor < self.length: + currentChar = self.string[self.cursor] + if currentChar == "0": + dBoolean = False + else: + dBoolean = True + self.cursor = self.cursor + 1 + else: + dBoolean = None + + return dBoolean + + def deserializeString(self): + length = self.deserializeInteger() + start = self.cursor + 2 + end = start+length + value = self.string[start:end] + self.cursor = end + 1 + + return value + + def deserializeArray(self): + isHash = False + max = self.deserializeInteger() + dArray = [ None ] * max + + self.cursor = self.cursor + 2 + count = 0 + while count < max: + elementIndex = self.deserialize() + self.cursor = self.cursor + 1 + element = self.deserialize() + if isHash: + if type(elementIndex) == int: + elementIndex = "%d" % elementIndex + else: + if type(elementIndex) != int: + dArray = self._arrayToHash(dArray) + isHash = True + dArray[elementIndex] = element + self.cursor = self.cursor + 1 + count = count + 1 + + if self.string[self.cursor] != "}": + raise Exception, \ + ("inconsistency detected in serialized string at character %d:\n%s" + % (self.cursor, self._exceptionSample())) + + return dArray + + def _exceptionSample(self): + if self.cursor > 30: + start = self.cursor - 30 + prefix = "..." + else: + start = 0 + prefix = "" + carret = self.cursor + len(prefix) - start + length = len(self.string) + if self.cursor + 30 < length: + end = self.cursor + 30 + suffix = "..." + else: + end = length + suffix = "" + + sample = self.string[start:end] + while sample[0] == " ": + carret = carret - 1 + sample = sample[1:] + + return "%s%s%s\n%s^" % (prefix, sample, suffix, carret * " ") + + def _arrayToHash(self, array): + dHash = {} + count = 0 + for element in array: + dHash["%d" % count] = element + count = count + 1 + + return dHash + + def deserialize(self): + dObject = None + + if self.string is not None and self.length > 0: + currentChar = self.string[self.cursor] + self.cursor = self.cursor + 2 + if currentChar == 'a': + dObject = self.deserializeArray() + elif currentChar == 's': + dObject = self.deserializeString() + elif currentChar == 'i': + dObject = self.deserializeInteger() + elif currentChar == 'b': + dObject = self.deserializeBoolean() + elif currentChar == 'N': + dObject = None + + return dObject diff --git a/Migration/Horde/README b/Migration/Horde/README new file mode 100644 index 000000000..4d04218a8 --- /dev/null +++ b/Migration/Horde/README @@ -0,0 +1,7 @@ +1) copy config.py.in to config.py and personalize the settings +2) personalize the domain setting in signature.py (look for DOMAIN.COM) +3) the scripts require "webdavlib.py", which is located in /Tests/Integration/. Therefore, in order to use the scripts, we must set the environment variable "PYTHONPATH" to that directory on our system. +4) invoke "signature " for importing signatures +5) invoke "turba " for importing signatures +6) "" can have the special "ALL" value + diff --git a/Migration/Horde/TurbaConverter.py b/Migration/Horde/TurbaConverter.py new file mode 100644 index 000000000..cfe32b503 --- /dev/null +++ b/Migration/Horde/TurbaConverter.py @@ -0,0 +1,351 @@ +import PHPDeserializer +import webdavlib +import sys + +commonMappings = { "owner_id": "owner", + "object_id": "filename", + "object_uid": "uid", + "object_name": "fn" } +cardMappings = { "object_alias": "nickname", + "object_email": "email", + "object_homeaddress": "homeaddress", + "object_homephone": "homephone", + "object_workaddress": "workaddress", + "object_workphone": "workphone", + "object_cellphone": "cellphone", + "object_fax": "fax", + "object_title": "title", + "object_company": "org", + "object_notes": "notes", + "object_freebusyurl": "fburl" } + +prodid = "-//Inverse inc.//SOGo Turba Importer 1.0//EN" + +# a managed type of template where each line is put only if at least one field +# has been filled +cardTemplate = u"""BEGIN:VCARD\r +VERSION:3.0\r +PRODID:%s\r +UID:${uid}\r +FN:${fn}\r +TITLE:${title}\r +ORG:${org};\r +NICKNAME:${nickname}\r +EMAIL:${email}\r +ADR;TYPE=work:;;${workaddress};;;;\r +ADR;TYPE=home:;;${homeaddress};;;;\r +TEL;TYPE=work:${workphone}\r +TEL;TYPE=home:${homephone}\r +TEL;TYPE=fax:${fax}\r +NOTE:${notes}\r +FBURL:${fburl}\r +END:VCARD""" % prodid + +class TurbaConverter: + def __init__(self, user, webdavConfig): + self.user = user + self.webdavConfig = webdavConfig + + def start(self, conn): + self.conn = conn + self.readUsers() + self.missing = [] + for user in self.users.keys(): + self.hasCards = False + self.hasLists = False + self.currentUser = user + self.readUserRecords() + if self.hasCards or self.hasLists: + print "Converting addressbook of '%s'" % user + self.prepareCards() + self.uploadCards() + self.prepareLists() + self.uploadLists() + else: + self.missing.append(user) + + if len(self.missing) > 0: + print "No information extracted for: %s" % ", ".join(self.missing) + + print "Done" + + def readUsers(self): + self.users = {} + + cursor = self.conn.cursor() + query = "SELECT user_uid, datatree_name FROM horde_datatree" + if self.user != "ALL": + query = query + " WHERE user_uid = '%s'" % self.user + cursor.execute(query) + + records = cursor.fetchall() + count = 0 + max = len(records) + for record in records: + record_user = record[0].lower() + if not self.users.has_key(record_user): + self.users[record_user] = [] + self.users[record_user].append(record[1]) + count = count + 1 + cursor.close() + + def readUserRecords(self): + self.cards = {} + self.lists = {} + + cursor = self.conn.cursor() + owner_ids = self.users[self.currentUser] + whereClause = "owner_id = '%s'" % "' or owner_id = '".join(owner_ids) + query = "SELECT * FROM turba_objects WHERE %s" % whereClause + cursor.execute(query) + self.prepareColumns(cursor) + + records = cursor.fetchall() + count = 0 + max = len(records) + while count < max: + self.parseRecord(records[count]) + count = count + 1 + + cursor.close() + + def prepareColumns(self, cursor): + self.columns = {} + count = 0 + for dbColumn in cursor.description: + columnId = dbColumn[0] + self.columns[columnId] = count + count = count + 1 + + def parseRecord(self, record): + typeCol = self.columns["object_type"] + meta = {} + self.applyRecordMappings(meta, record, commonMappings) + + if record[typeCol] == "Object": + meta["type"] = "card" + self.hasCards = True + self.applyRecordMappings(meta, record, cardMappings) + elif record[typeCol] == "Group": + meta["type"] = "list" + self.hasLists = True + self.fillListMembers(meta, record) + else: + raise Exception, "UNKNOWN TYPE: %s" % record[type] + + self.dispatchMeta(meta) + + def applyRecordMappings(self, meta, record, mappings): + for k in mappings.keys(): + metaKey = mappings[k] + meta[metaKey] = self.recordColumn(record, k) + + def recordColumn(self, record, columnName): + columnIndex = self.columns[columnName] + value = record[columnIndex] + if value is None: + value = u"" + else: + value = self.deUTF8Ize(value) + + return value + + def deUTF8Ize(self, value): + # unicode -> repeat(utf-8 str -> iso-8859-1 str) -> unicode + oldValue = value + + done = False + while not done: + try: + utf8Value = value.encode("iso-8859-1") + value = utf8Value.decode("utf-8") + except: + done = True + if value == oldValue: + done = True + + return value + + def fillListMembers(self, meta, record): + members = self.recordColumn(record, "object_members") + if members is not None and len(members) > 0: + deserializer = PHPDeserializer.PHPDeserializer(members) + dMembers = deserializer.deserialize() + else: + dMembers = [] + meta["members"] = dMembers + + def dispatchMeta(self, meta): + owner = meta["owner"] + if meta["type"] == "card": + repository = self.cards + else: + repository = self.lists + filename = meta["filename"] + repository[filename] = meta + + def prepareCards(self): + count = 0 + for filename in self.cards.keys(): + card = self.cards[filename] + card["data"] = self.buildVCard(card).encode("utf-8") + count = count + 1 + if count > 0: + print " prepared %d cards" % count + + def buildVCard(self, card): + vcardArray = [] + tmplArray = cardTemplate.split("\r\n") + for line in tmplArray: + keyPos = line.find("${") + if keyPos > -1: + keyEndPos = line.find("}") + key = line[keyPos+2:keyEndPos] + if card.has_key(key): + value = card[key] + if len(value) > 0: + newLine = "%s%s%s" % (line[0:keyPos], + value.replace(";", "\;"), + line[keyEndPos + 1:]) + vcardArray.append(self.foldLineIfNeeded(newLine)) + else: + vcardArray.append(self.foldLineIfNeeded(line)) + + return "\r\n".join(vcardArray) + + def foldLineIfNeeded(self, line): + wasFolded = False + newLine = line\ + .replace("\\", "\\\\") \ + .replace("\r", "\\r") \ + .replace("\n", "\\n") + lines = [] + while len(newLine) > 73: + wasFolded = True + lines.append(newLine[0:73]) + newLine = newLine[73:] + lines.append(newLine) + + newLine = "\r\n ".join(lines) + if wasFolded: + print "line was folded: '%s' ->\n\n%s\n\n" % (line, newLine) + + return newLine + + def uploadCards(self): + self.uploadEntries(self.cards, + "vcf", "text/x-vcard; charset=utf-8"); + + def prepareLists(self): + count = 0 + skipped = 0 + for filename in self.lists.keys(): + list = self.lists[filename] + vlist = self.buildVList(list) + if vlist is None: + skipped = skipped + 1 + else: + list["data"] = vlist.encode("utf-8") + count = count + 1 + + if (count + skipped) > 0: + print " prepared %d lists. %d were skipped." % (count, skipped) + + def buildVList(self, list): + vlist = None + + members = list["members"] + if len(members) > 0: + cardMembers = [] + for member in members: + card = self.getListCard(member) + if card is not None: + cardMembers.append(card) + if len(cardMembers) > 0: + vlist = self.assembleVList(list, cardMembers) + else: + print " list '%s' skipped because of lack of usable" \ + " members" % list["filename"] + + return vlist + + def getListCard(self, cardRef): + card = None + if len(cardRef) != 0 and not cardRef.startswith("localldap:"): + if cardRef.startswith("localsql:"): + cardRef = cardRef[9:] + if self.cards.has_key(cardRef): + card = self.cards[cardRef] + else: + print "card reference does not exist: '%s'" % cardRef + + return card + + def assembleVList(self, list, cardMembers): + entries = [] + for cardMember in cardMembers: + if cardMember.has_key("fn") and len(cardMember["fn"]) > 0: + fn = ";FN=%s" % cardMember["fn"] + else: + fn = "" + if cardMember.has_key("email") and len(cardMember["email"]) > 0: + email = ";EMAIL=%s" % cardMember["email"] + else: + email = "" + entries.append("CARD%s%s:%s.vcf" + % (fn, email, cardMember["filename"])) + if list.has_key("fn") and len(list["fn"]) > 0: + listfn = "FN:%s\r\n" % list["fn"] + else: + listfn = "" + vlist = """BEGIN:VLIST\r +PRODID:%s\r +VERSION:1.0\r +UID:%s\r +%s%s\r +END:VLIST""" % (prodid, list["uid"], listfn, "\r\n".join(entries)) + + return vlist + + def uploadLists(self): + self.uploadEntries(self.lists, + "vlf", "text/x-vcard; charset=utf-8"); + + def uploadEntries(self, entries, extension, mimeType): + isatty = sys.stdout.isatty() # enable progressive display of summary + success = 0 + failure = 0 + client = webdavlib.WebDAVClient(self.webdavConfig["hostname"], + self.webdavConfig["port"], + self.webdavConfig["username"], + self.webdavConfig["password"]) + collection = '/SOGo/dav/%s/Contacts/personal' % self.currentUser + + mkcol = webdavlib.WebDAVMKCOL(collection) + client.execute(mkcol) + + for entryName in entries.keys(): + entry = entries[entryName] + if entry.has_key("data"): + fullFilename = "%s.%s" % (entry["filename"], extension) + url = "%s/%s" % (collection, fullFilename) + put = webdavlib.HTTPPUT(url, entry["data"]) + put.content_type = mimeType + client.execute(put) + if (put.response["status"] < 200 + or put.response["status"] > 399): + failure = failure + 1 + print " error uploading '%s': %d" \ + % (fullFilename, put.response["status"]) + else: + success = success + 1 + if isatty: + print "\r successes: %d; failures: %d" % (success, failure), + if (success + failure) % 5 == 0: + sys.stdout.flush() + if isatty: + print "" + else: + if (success + failure) > 0: + print " successes: %d; failures: %d\n" % (success, failure) + sys.stdout.flush() diff --git a/Migration/Horde/config.py.in b/Migration/Horde/config.py.in new file mode 100644 index 000000000..05aa6b60c --- /dev/null +++ b/Migration/Horde/config.py.in @@ -0,0 +1,11 @@ +#!/usr/bin/python + +webdavConfig = { "hostname": "sogo.hostname.com", + "port": 80, + "username": "username", + "password": "password" } + +dbConfig = { "host": "localhost", + "username": "username", + "password": "password", + "db": "database" } diff --git a/Migration/Horde/signature.py b/Migration/Horde/signature.py new file mode 100755 index 000000000..a8ce024e1 --- /dev/null +++ b/Migration/Horde/signature.py @@ -0,0 +1,48 @@ +#!/usr/bin/python + +import sys +import MySQLdb +import webdavlib + +import HordeSignatureConverter + +from config import webdavConfig, dbConfig + +xmlns_inversedav = "urn:inverse:params:xml:ns:inverse-dav" + +def UploadSignature(client, user, signature): + collection = '/SOGo/dav/%s/' % user + proppatch \ + = webdavlib.WebDAVPROPPATCH(collection, + { "{%s}signature" % xmlns_inversedav: \ + signature.encode("utf-8") }) + client.execute(proppatch) + if (proppatch.response["status"] < 200 + or proppatch.response["status"] > 399): + print "Failure uploading signature for user '%s': %d" \ + % (user, proppatch.response["status"]) + +if __name__ == "__main__": + if len(sys.argv) > 1: + user = sys.argv[1] + else: + raise Exception, " argument must be specified" \ + " (use 'ALL' for everyone)" + + conn = MySQLdb.connect(host = dbConfig["hostname"], + user = dbConfig["username"], + passwd = dbConfig["password"], + db = dbConfig["database"], + use_unicode = True) + + cnv = HordeSignatureConverter.HordeSignatureConverter(user, "DOMAIN.COM") + signatures = cnv.fetchSignatures(conn) + conn.close() + + client = webdavlib.WebDAVClient(webdavConfig["hostname"], + webdavConfig["port"], + webdavConfig["username"], + webdavConfig["password"]) + for user in signatures: + signature = signatures[user] + UploadSignature(client, user, signature) diff --git a/Migration/Horde/turba.py b/Migration/Horde/turba.py new file mode 100755 index 000000000..22247a275 --- /dev/null +++ b/Migration/Horde/turba.py @@ -0,0 +1,24 @@ +#!/usr/bin/python + +import sys +import MySQLdb + +import TurbaConverter + +from config import webdavConfig, dbConfig + +if __name__ == "__main__": + if len(sys.argv) > 1: + user = sys.argv[1] + else: + raise Exception, " argument must be specified" \ + " (use 'ALL' for everyone)" + + conn = MySQLdb.connect(host = dbConfig["hostname"], + user = dbConfig["username"], + passwd = dbConfig["password"], + db = dbConfig["database"], + use_unicode = True) + cnv = TurbaConverter.TurbaConverter(user, webdavConfig) + cnv.start(conn) + conn.close()