]> err.no Git - scalable-opengroupware.org/blobdiff - ChangeLog
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1305 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / ChangeLog
index 613a3afc63c95e49310732c3799f08c26d73d722..3d5fba87c2c287ae630983797f65a53f41b0bc46 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+2007-12-17  Francis Lachapelle  <flachapelle@inverse.ca>
+
+       * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
+       -composeAction]): fixed URL when no recipient is specified.
+
+2007-12-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/Scheduler/NSArray+Scheduler.m ([NSMutableArray
+       -reverseArray]): new category method.
+
+2007-12-14  Ludovic Marcotte <ludovic@inverse.ca>
+
+       * SoObjects/Appointments/SOGoCalendarComponent.m
+       We set headers in lowercase so that they get properly
+       encoded by SOPE.
+
+       * SoObjects/Mailer/SOGoDraftObject.m
+       Minor cleanups. 
+
+2007-12-13  Francis Lachapelle  <flachapelle@inverse.ca>
+
+       * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame -saveFoldersStateAction])
+       ([UIxMailMainFrame -getFoldersStateAction]): new methods to get
+       and set the folders state of the user's web view.
+
+2007-12-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -crashAction]): new
+       action methods that generates a segmentation faults.
+       ([SOGoRootPage -exceptionAction]): new method that returns an
+       exception object.
+       ([SOGoRootPage -raisedExceptionAction]): new method that raises an
+       exception without returning it.
+
+       * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWithStatus:status])
+       ([UIxComponent -responseWithStatus:statusandString:contentString])
+       ([UIxComponent -responseWithStatus:statusandJSONRepresentation:contentObject])
+       ([UIxComponent -responseWith204]): new utility methods.
+
+       * UI/Common/WODirectAction+SOGo.m ([WODirectAction
+       -responseWithStatus:statusandString:contentString])
+       ([WODirectAction
+       -responseWithStatus:statusandJSONRepresentation:contentObject]):
+       new utility methods.
+
+       * SoObjects/SOGo/NSScanner+BSJSONAdditions.m ([NSScanner
+       -scanJSONStringDelimiterString]): new category module taken from
+       BSJSONAdditions 1.3.
+
+       * SoObjects/SOGo/NSDictionary+BSJSONAdditions.[hm]: new category
+       module taken from BSJSONAdditions 1.3.
+       http://blakeseely.com/downloads.html
+
+2007-12-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/NSString+Utilities.m ([NSString
+       -stringByDetectingURLs]): we now go back until the real start of
+       the found url.
+
+       * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+       -fetchAttachmentIds]): new method that wanders through the mail
+       structure to collect the attachment content ids and to associate
+       them with their url.
+
+       * UI/MailPartViewers/UIxMailPartHTMLViewer.m
+       ([_UIxHTMLMailContentHandler
+       -startElement:_localNamenamespace:_nsrawName:_rawNameattributes:_attributes]):
+       the content-ids are now enclosed between "<>" before retrieval
+       from the attachment dictionary.
+       ([UIxMailPartHTMLViewer -cssContent])
+       ([UIxMailPartHTMLViewer -flatContentAsString]): the content-ids
+       are now fetch from the clientobject (an instance of
+       SOGoMailObject) with the new "fetchAttachmentIds" method.
+
+2007-12-12  Francis Lachapelle  <flachapelle@inverse.ca>
+
+       * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
+       -eventsListAction]): added the state of the calendar's owner with
+       respect to the current event.
+
+       * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
+       -_loadAttendees]): added the retrieval of attendees state on
+       current event.
+
+2007-12-12  Ludovic Marcotte <ludovic@inverse.ca>
+
+       * UI/MailPartViewers/UIxMailRenderingContext.{h,m} 
+       Removed template caching which added very little
+       and created re-entrant issues.
+       
+       * UI/MailPartViewers/UIxMailPartHTMLViewer.m 
+        Added a hack (and stated so in the source file)
+       to avoid what seems to be a bug in libxml. 
+
+2007-12-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
+       -davCreationDate])
+       ([SOGoContentObject -davLastModified])
+       ([SOGoContentObject -davContentLength]): implemented dav methods.
+
+2007-12-10  Francis Lachapelle  <flachapelle@inverse.ca>
+
+       * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
+       -GETAction:]): when asAttachment is set to true, the header
+       "content-disposition" is set to "attachment" so browsers like IE
+       and Safari properly asks the user to save the file.
+
+2007-12-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailPartViewers/UIxMailPartHTMLViewer.m
+       ([UIxMailPartHTMLViewer -flatContentAsString]): when in
+       UIxMailPartAlternative, scan the filenames of potential cid at the
+       same level as our parent.
+
+2007-12-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * Main/SOGo.m ([SOGo -run]): the table creation script now have a
+       @{tableName} substitution variable to be substitued with the real
+       table name obtained from the configuration variables.
+
+2007-12-07  Ludovic Marcotte <ludovic@inverse.ca>
+
+       * UI/MailPartViewers/UIxMailRenderingContext.m 
+       We treat multipart/appledouble like multipart/mixed
+       for now. That allows the user to save both parts.
+
+       * Corrected typos in Localizable.string files.
+
+2007-12-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/Common/UIxAclEditor.m ([-currentUserIsOwner]): replaced
+       method with -canModifyAcls that invokes the security manager
+       instead for the permission "SaveAcls" on the client object.
+
+       * SoObjects/Appointments/SOGoCalendarComponent.m
+       ([SOGoCalendarComponent -contentAsString]): securize the returned content.
+       ([SOGoCalendarComponent -aclsForUser:uid]): check whether the user
+       is an organizer or a participant as well.
+
+       * SoObjects/Appointments/SOGoAppointmentObject.m
+       ([SOGoAppointmentObject -changeParticipationStatus:_status]): the
+       user we should change the status of is not the active user but the
+       owner of the object. This is for delegation.
+
+       * SoObjects/Appointments/SOGoAppointmentFolder.m
+       ([SOGoAppointmentFolder -fetchContentObjectNames]): fetch the
+       elements through the fetchFields:from:to:title:component: method
+       method, so that the result is already filtered depending on the
+       acl.
+
+       * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
+       -toolbar]): if the current user is a delegate, take the permission
+       "ModifyComponent" into account. Also, do not let him/her modify an
+       event for which he/she is the organizer.
+
+       * SoObjects/Contacts/SOGoContactLDAPFolder.m
+       ([SOGoContactLDAPFolder -davResourceType]): declared as a carddav
+       addressbook collection.
+
+       * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
+       -davResourceType]):  declared as a carddav addressbook collection.
+
+       * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davLastModified]):
+       override SoObject's implementation. Otherwise a localized date is returned.
+
+       * UI/Common/UIxPageFrame.m ([UIxPageFrame -isCalendar])
+       ([UIxPageFrame -isContacts], [UIxPageFrame -isMail]): getters to
+       determine which module is the current one.
+
+2007-12-06  Francis Lachapelle  <flachapelle@inverse.ca>
+
+       * UI/Scheduler/NSArray+Scheduler.m ([NSArray -compareEventsTitleAscending:otherEvent])
+       ([NSArray -compareEventsLocationAscending:otherEvent])
+       ([NSArray -compareEventsEndDateAscending:otherEvent])
+       ([NSArray -reversedArray]): new methods that sort an array of
+       events depending of various parameters.
+
+       * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
+       -eventsListAction]): added support for sorting events.
+
+2007-12-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction])
+       ([UIxMailEditor -sendAction]): make sure that the attachments
+       having the same filename are correctly sequenced (ex: base.ext,
+       base-1.ext, base-2.ext).
+
+       * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
+       -fetchBLOB]): added support for quoted-printable decoding. Also,
+       we return nil if the type is not supported.
+
+2007-12-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -newAction]):
+       create task obejcts with the .ics extension.
+
+       * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
+       -newAction]): create appointment objects with the .ics extension.
+
+       * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -newAction]):
+       create objects with the .vcf extension.
+
+       * Main/NSException+Stacktrace.m: added missing symbols from
+       NSException.m and NSDebug.m (GNUstep).
+
+       * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
+       -foldersSearchAction]): make use of the new search methods in
+       SOGoUserFolder (see below).
+
+       * UI/Contacts/UIxContactFoldersView.m ([-foldersSearchAction]):
+       moved method into ../MainUI/SOGoUserHomePage.m.
+
+       * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
+       -foldersOfType:folderTypeforUID:uid]): only return folders owned
+       by the specified user.
+
+2007-12-05  Francis Lachapelle  <flachapelle@inverse.ca>
+
+       * SoObjects/Mailer/SOGoDraftObject.m: the condition for replyToAll
+       has to be done later to avoid duplicated to and cc addresses.
+
+2007-12-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Appointments/SOGoAppointmentFolder.m
+       ([SOGoAppointmentFolder -davCalendarQuery:queryContext]): fixed a leak.
+
+       * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davSubscribe:localContext])
+       ([SOGoGCSFolder -davUnsubscribe:localContext]): subscribe an
+       unsubscribe from DAV-based accesses. We could be compatible with
+       Microsoft's extensions but we have no need for a "subcription id",
+       so we implement our own.
+
+       * SoObjects/SOGo/SOGoObject.m ([SOGoObject
+       -POSTAction:localContext]): new method to intercept DAV POSTs,
+       which we now use to implement certain custom commands such as
+       "subscribe" and "unsubscribe".
+
+       * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
+       -davNamespaces]): declare the
+       "urn:inverse:params:xml:ns:inverse-dav" xml ns.
+       ([SOGoUserFolder -foldersOfType:folderTypeforUID:uid]): new method
+       designed to replace the UIxContactFoldersView.m mechanism for
+       displaying folders to subcribe to, as a common code base for both
+       Web and DAV-based subscriptions.
+       ([SOGoUserFolder -foldersOfType:typematchingUID:uid]): same as
+       above.
+       ([SOGoUserFolder -davCollectionQuery:queryContext]): new method
+       that implement a custom DAV-based protocol query for querying
+       folder based on specified attributes.
+
+2007-12-03  Ludovic Marcotte <ludovic@inverse.ca>
+
+       * Main/NSException+Stacktrace.{h,m} - new files
+       to handle automatic stack trace generation
+       upon an uncaught exception.
+
+       * Updated the templates and Localizable.string files
+       to fix typos and add new strings.
+
+       * SoObjects/Mailer/SOGoMailBodyPart.m
+       Fixed attachment retreival when the first character
+       is a digit.
+
+       * SoObjects/SOGo/SOGoGCSFolder.m
+       Fixed the sending of emails when folders are created/removed.
+       Notifications are sent if the defaults SOGoFoldersSendEMailNotifications
+       is set to YES.
+
+       * UI/Common/UIxUserRightsEditor.m
+       * UI/Templates/SOGoACLEnglishModificationAdvisory.wox
+       * UI/Templates/SOGoACLFrenchModificationAdvisory.wox
+       * UI/Templates/SOGoACLGermanModificationAdvisory.wox
+       Added the capabilities to email notifications when ACLs have
+       changed on a DAV collection or an IMAP mailbox. Also added
+       new templates (3 .wox) to deal with this. 
+
+       * UI/WebServerResources/ContactsUI.js
+       UI/WebServerResources/SchedulerUI.js
+       Added warnings on operations w/o selection.
+
+2007-11-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
+       -appendSubscribedSources]): don't include sources for which we
+       don't have the SOGoPerm_AccessObject permission.
+
+       * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
+       -rfc822DateString]): we want positive timezones to be specified
+       with a leading "+" too.
+
+2007-11-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
+       +folderWithSubscriptionReference:referenceinContainer:aContainer]):
+       return nil if the subscribed folder has no display name (meaning
+       it no longer exists).
+
+       * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
+       -appendPersonalSources]): don't include sources which are no
+       longer existing.
+
+       * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
+       -ocsPathOfContainer]): return the intended value, not that of
+       ocsPath...
+
+       * SoObjects/Appointments/SOGoCalendarComponent.m
+       ([SOGoCalendarComponent -sendResponseToOrganizer]): send the
+       message only of sendEMailNotifications is set.
+
+       * SoObjects/SOGo/SOGoObject.m ([SOGoObject -subscriptionRoles]):
+       new method that returns the roles that qualifies for adding the
+       special "authorized subscribed" sogo role.
+
+2007-11-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
+       -aclsForUser:uid]): copy all the roles from the container. If the
+       object is new, make sure the roles contain "ObjectEditor" if and
+       only if "ObjectCreator" is present.
+
+       * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
+       -aclsForUser:uid]): no longer take the "ObjectReader" role into
+       account.
+
+       * UI/Common/UIxFolderActions.m ([UIxFolderActions
+       -canAccessContentAction]): always return HTTP status 204. We want
+       this because we are relying on the SOPE access control manager to
+       grant access to this method. This requires a fine-tuned access
+       control in SOGo itself...
+
+       * UI/Contacts/UIxContactsUserRightsEditor.m ([-userCanReadObjects])
+       ([-setUserCanReadObjects:userCanReadObjects]): removed methods.
+
+       * UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor
+       -updateRights]): no longer take the "ObjectReader" role into account.
+       ([-userCanReadMails], [-setUserCanReadMails:userCanReadMails]):
+       removed methods.
+
+       * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
+       -fetchFreeBusyInfosFrom:_startDateto:_endDate]): specify context
+       when looking up the Calendar folder.
+
+2007-11-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): same as below.
+
+       * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
+       -event]): create the event if it doesn't exist.
+
+       * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -userHasCalendarAccess])
+       ([UIxPreferences -userHasMailAccess]): same as below, for
+       displaying preference tabs.
+
+       * UI/Common/UIxPageFrame.m ([UIxPageFrame
+       -userHasCalendarAccess]): new accessor for the link banner.
+       ([UIxPageFrame -userHasMailAccess]): same as above.
+
+       * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
+       -toManyRelationshipKeys]): do not report the path to modules to
+       which the user has no access. No longer cache this information
+       statically, the array will be generated at each call.
+       ([SOGoUserFolder -lookupName:_keyinContext:_ctxacquire:_flag]):
+       ignore the path to modules to which the user has no access.
+
+       * SoObjects/SOGo/SOGoUser.m ([SOGoUser -canAccessModule:module]):
+       new method that returns whether the user has access to the
+       specified module.
+
+       * SoObjects/SOGo/LDAPSource.m ([LDAPSource
+       -initFromUDSource:udSource]): take a new parameter named
+       'ModulesContraints' that defines a set of constraints for
+       accessing specified named modules. This is an optout, meaning the
+       modules will be present unless a constraint is specified.
+
+       * SoObjects/Appointments/SOGoAppointmentFolder.m
+       ([SOGoAppointmentFolder
+       -roleForComponentsWithAccessClass:accessClassforUser:uid]): cache
+       acl to reduce method calls.
+       ([SOGoAppointmentFolder
+       -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
+       if the user is not the current user, we strip the useless info
+       from the meta data.
+
+       * UI/Common/WODirectAction+SOGo.m ([WODirectAction
+       -labelForKey:key]): new category method.
+
+       * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
+       -event]): same as below.
+
+       * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): request a
+       secured version of the component.
+
+       * UI/MailPartViewers/UIxMailPartViewer.m
+       ([-fallbackStringEncoding]): removed method.
+       ([UIxMailPartViewer -flatContentAsString]): we no longer use [self
+       fallbackStringEncoding]. Instead we directly specify
+       NSISOLatin1StringEncoding if UTF-8 has failed.
+
+       * UI/MailPartViewers/UIxMailPartICalViewer.m
+       ([-fallbackStringEncoding]): removed method.
+
+2007-11-25  Ludovic Marcotte <ludovic@inverse.ca>
+
+        * SoObjects/Mailer/SOGoMailForward.m
+        Use [sourceMail decodedSubject] instead of [sourceMail subject]
+        Signature fix in -signature - see the comment
+        for SOGoMailReply.
+
+        * SoObjects/Mailer/SOGoMailObject.m
+        Improved -stringFromData: to try UTF-8 then fallback to Latin1
+
+        * SoObjects/Mailer/SOGoMailReply.m
+        Modified -messageBody to strip the signature from the reply.
+        Also modified -signature to add "-- \n%@" instead of the
+        broken ""--\r\n%@" pattern.
+
+        * UI/MailPartViewers/UIxMailPartAlternativeViewer.m
+        We now favor text/calendar parts over text/html and
+        text/plain parts when viewing a multipart/alternative mail.
+        This allows us to show the email invitations coming from
+        Microsoft Outlook.
+
+        * UI/MailerUI/UIxMailAccountActions.m
+        Signature fix in -composeAction - see the comment
+        for SOGoMailReply.
+
+        * UI/MailPartViewers/UIxMailPartViewer.m
+        Modified -flatContentAsString to use UTF-8 as the
+        default fallback encoding for 8-bit content.
+
+       * SoObjects/Mailer/SOGoDraftObject.m
+       Modified _fillInReplyAddresses:replyToAll:envelope:
+       so that if there's no recipient, we add at least
+       ourself to the list.    
+       Fixed a mem leak in the same method.
+       
+2007-11-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailPartViewers/UIxMailRenderingContext.m
+       ([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
+
+       * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+       -plainTextContentFetchKeys]): same as below.
+
+       * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
+       +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
+       application/ics type from Google Calendar.
+
+       * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
+       +distantFuture]): rewrote method to return an object that is
+       compatible with NSCalendarDate, unlike the implementation in
+       GNUstep.
+       ([NSCalendarDate +distantPast]): same as above.
+
+2007-11-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
+       when charset is us-ascii, match it to ascii rather than none.
+
+       * SoObjects/Appointments/SOGoAppointmentFolder.m
+       ([SOGoAppointmentFolder
+       -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
+       added search on the c_title column too.
+
+       * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
+       -eventsListAction]): take the "search" url parameter into account.
+       ([UIxCalListingActions -eventsListAction]): fetch events matching
+       the title filter too.
+
+       * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
+       user infos are now posted as "application/x-www-form-urlencoded".
+       So we have to have like a form has been posted.
+
+2007-11-21  Francis Lachapelle  <flachapelle@inverse.ca>
+
+       * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
+       -calendarList]): also returns the calendar of the current
+       event. This is required so the proper calender is selected when
+       you view an event to which you don't have write access.
+
+       * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]): 
+       also returns true for super users.
+
+2007-11-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+       -lookupImap4BodyPartKey:inContext:]): return a correct body part
+       when "0" is requested, taking its mime-type into account.
+
+       * UI/MailPartViewers/UIxMailRenderingContext.m
+       ([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
+       return content for part "0", which would be the message body.
+
+2007-11-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailPartViewers/UIxMailPartHTMLViewer.m
+       ([_UIxHTMLMailContentHandler
+       -setContentEncoding:newContentEncoding]): new method that
+       specifies an xml charset to return to the parser.
+       ([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
+       charset to the content handler before parsing.
+
+       * SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
+       empty c_name as a valid response when looking up an event. Create
+       one in that case instead.
+
+2007-11-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
+       returns the signature for the default identity of the default
+       accouunt...
+       ([UIxPreferences -setSignature:newSignature]): accessor that sets
+       the default signature.
+
+       * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
+       -composeAction]): append the message signature to the new draft.
+
+       * SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
+       same as above.
+
+       * SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
+       -signature]): new method that takes the user's signature and put
+       it at the end of the message, if exists.
+
+       * UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
+       accessor that forwards the call to the active user.
+
+       * SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
+       user default signature.
+       ([SOGoUser -isSuperUser]): declares whether the user is listed
+       among the super users.
+
+       * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
+       -setComponent:newComponent]): retain the component object.
+       ([UIxComponentEditor -organizerIdentity]): new accessor method to
+       handle list of possible organizers.
+
+       * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
+       -event]): retain the returned event object.
+
+       * SoObjects/Appointments/SOGoAppointmentObject.m
+       ([SOGoAppointmentObject -saveComponent:newEvent]): reset the
+       organizer only if there are no attendees AND the owner of the
+       component is not the organizer him-/herself.
+
+       * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
+       -toolbar]): rewrote in a way that ensures that each case is
+       handled properly.
+
+       * SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
+       override method.
+
+       * UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
+       ([-declineAction]): commented out unused methods.
+
+       * UI/MailPartViewers/UIxMailPartICalActions.m
+       ([UIxMailPartICalActions -deleteFromCalendarAction]): actually
+       delete the found object.
+
+2007-11-18  Ludovic Marcotte <ludovic@inverse.ca>
+
+       * SoObjects/Mailer/SOGoMailBodyPart.m
+       SoObjects/Mailer/SOGoMailObject.m
+       UI/MailPartViewers/UIxMailPartViewer.m
+       Added support of messages containing non-textual
+       content and no parts.
+
+       * UI/MailerUI/UIxMailView.m
+       SoObjects/Mailer/SOGoMailObject.m
+       UI/Templates/MailerUI/UIxMailView.wox
+       Added support for the Reply-To header upon
+       message display.
+
+2007-11-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
+       invoke saveComponent:.
+
+       * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
+       ([UIxComponentEditor -organizerName]): new template accessor
+       related to displaying the event's organizer.
+       ([-containsConflict:_component]): removed method.
+       ([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
+       set RSVP to "TRUE" on each attendee.
+
+       * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
+       -saveAction]): invoke saveComponent:.
+
+       * UI/MailPartViewers/UIxMailPartICalViewer.m
+       ([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
+       the -userIsOrganizer: category method.
+       ([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
+       ([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
+       accessor that determines whether the "Update" button should be
+       displayed.
+
+       * UI/MailPartViewers/UIxMailPartICalActions.m
+       ([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
+       action.
+       ([UIxMailPartICalActions -updateUserStatusAction]): implemented
+       action.
+
+       * UI/Common/UIxPageFrame.m ([UIxPageFrame
+       -setCssFiles:newCSSFiles]): new accessor that enables the
+       sub-templates to specify extra CSS files to load.
+
+       * SoObjects/SOGo/SOGoUser.m ([SOGoUser
+       -homeFolderInContext:context]): cache the home folder of the user
+       object instead of the current user.
+
+       * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
+       -deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
+       method if the child object implements it.
+
+       * SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
+       removed method.
+
+       * SoObjects/SOGo/LDAPSource.m ([LDAPSource
+       -setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
+       take a new "mailFields" parameter defining an array of fields
+       where to look at when searching the user's emails. It defaults to
+       the standard "mail" LDAP field.
+
+       * SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
+       SoComponent implementing a template for ITIP replies.
+
+       * SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
+       -mailAddress]): new method that returns a properly formatted email
+       address for the specified person entry.
+       ([iCalPerson -uid]): new method that tests whether the user is
+       known to the system and if so, returns its user id.
+
+       * SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
+
+       * SoObjects/Appointments/iCalEventChanges+SOGo.m
+       ([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
+       the changes involved need a sequence inscrease, based on the
+       RFC2446 (ITIP).
+
+       * SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
+       module.
+
+       * SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
+       -isStillRelevant]): new overriden method determining the relevance
+       of the current event based on its end date.
+
+       * SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
+
+       * SoObjects/Appointments/iCalEntityObject+SOGo.m
+       ([iCalEntityObject -attendeeUIDs]): new category methods that
+       returns an array containing the uids of the system-know attendees.
+       ([iCalEntityObject -isStillRelevant]): new template method.
+       ([iCalEntityObject -itipEntryWithMethod:method]): clone the
+       current entry calendar with the specified ITIP method.
+       ([iCalEntityObject -attendeesWithoutUser:user]): returns an array
+       of attendees while making sure the specified user is not listed.
+
+       * SoObjects/Appointments/SOGoCalendarComponent.m
+       ([SOGoCalendarComponent -calendar:create:secure]): new name for
+       -calendar:. Added a "secure" parameter that specifies whether a
+       stripped calendar instance is needed or not. Also, we no longer
+       cache the content to simplify handling of new data.
+       ([SOGoCalendarComponent -component:create:secure]): same as above.
+       ([SOGoCalendarComponent
+       -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
+       test whether the component is "still relevant" before sending an
+       email...
+       ([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
+       sending ITIP replies.
+       ([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
+       removed method. Replaced with -[iCalPerson uid] category method.
+
+       * SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
+       class. No longer override saveContentString:,
+       saveContentString:baseSequence:, .... Implemented the
+       saveComponent: and the prepareDelete methods instead. Those
+       methods are called only from the web methods. This avoids the
+       risks related to email sending and changes propagation.
+
+       * UI/Common/UIxTabItem.m: removed useless class module.
+
+       * UI/Common/UIxTabView.[hm]: removed useless class module.
+
+       * UI/Common/UIxPrintPageFrame.m: removed useless class module.
+
+       * UI/Common/UIxAppNavView.m: removed useless class module.
+
+2007-11-16  Ludovic Marcotte <ludovic@inverse.ca>
+
+        * SoObjects/Mailer/SOGoMailBaseObject.m
+       Fixed typo.
+
+       * SoObjects/Mailer/SOGoMailBodyPart.m
+       We also grok image/jpeg and return the SOGoMailBodyPart
+       for attachments fetching.
+
+       * SoObjects/Mailer/SOGoMailObject+Draft.m
+       Prevent a crash in case body decoding failed during
+       a reply.
+
+       * SoObjects/Mailer/SOGoMailObject.m
+       Improved body decoding during a reply to also try
+       latin1 as an encoding.
+
+       * UI/MailPartViewers/UIxMailRenderingContext.m
+       Greatly improved the display mechanisms for emails.
+       Also properly consider the content disposition for
+       most content types.
+
+       * UI/MailerUI/UIxMailToSelection.m
+       Removed worthless code.
+
+       * UI/WebServerResources/MailerUI.css
+       CSS fix for table views.
+
+2007-11-15  Ludovic Marcotte <ludovic@inverse.ca>
+
+        * UI/WebServerResources/MailerUI.js
+        We now check for empty selection and warn the
+        user about it when deleting messages
+        * SoObjects/Mailer/SOGoDraftObject.m
+        Correctly check for the presence of a subject
+        before attempting to forward a message from
+        the Drafts folder.
+
+        * SoObjects/Mailer/SOGoMailObject+Draft.m
+        We no longer use "[Fwd: ]" but simply "Fwd:"
+        when forwarding email messages.
+        * SoObjects/SOGo/SOGoUser.m
+        Modified the default forwarding format to be
+        inline instead of "attachment".
+        * SoObjects/Mailer/SOGoDraftObject.m
+        We now create and use a NGMimeContentDispositionHeaderField
+        in order to avoid encoding the whole Content-Disposition
+        header in case a non-ASCII char is present!
+
+2007-11-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
+       -findParticipant:user]): new method based on the one removed from
+       SOGoCalendarComponent below.
+
+       * SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
+       module for iCalEntityObject.
+
+       * SoObjects/Appointments/SOGoCalendarComponent.m
+       ([-findParticipant:user]): removed method.
+
+       * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
+       -setContentString:newContent]): new accessor method.
+       ([SOGoContentObject
+       -saveContentString:newContentbaseVersion:newBaseVersion]): invoke
+       -[self setContentString:].
+
+       * UI/MailPartViewers/UIxMailPartICalViewer.m
+       ([UIxMailPartICalViewer -authorativeEvent]): returns the most
+       up-to-date event.
+       ([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
+       hasEmail:].
+
+       * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
+       -stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
+       temporary buffer we are handing.
+
+       * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
+       -setComponent:newComponent]): check that newComponent is non-nil
+       before replacing the default values.
+       ([UIxComponentEditor -calendarList]): privacy is already an ivar.
+       We don't need to refetch it.
+
+2007-11-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
+       -fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
+       user from the list of recipients and make sure no other address is
+       counted twice.
+
+       * UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
+       -stringByConvertingCRLNToHTML]): build the returned NSString
+       without the ending \0.
+
+2007-11-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailPartViewers/UIxMailPartICalViewer.m
+       ([UIxMailPartICalViewer -acceptLink])
+       ([UIxMailPartICalViewer -declineLink])
+       ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
+
+       * UI/MailPartViewers/UIxMailPartICalAction.m
+       ([UIxMailPartICalAction -addToCalendarAction])
+       ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
+       methods.
+
+       * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+       -lookupImap4BodyPartKey:]): make use of the new method below.
+
+       * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
+       +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
+       that returns an appropriate Class depending on a given mime type.
+
+       * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
+       new boolean accessor that determines whether someone can create
+       (i.e. modify a new entry) or modify an existing entry.
+
+       * SoObjects/SOGo/SOGoObject.m ([SOGoObject
+       -lookupName:lookupNameinContext:localContextacquire:acquire]):
+       overriden method to bind looked up keys to So methods but by
+       avoiding a call to toOneRelationshipKeys. This will be the top
+       method of the chain, meant to override SoObject's behaviour.
+
+       * SoObjects/Contacts/SOGoContactLDAPFolder.m
+       ([SOGoContactLDAPFolder
+       -lookupName:objectNameinContext:lookupContextacquire:acquire]):
+       removed hack to prevent [super lookupName...] to read the entire
+       LDAP directory when looking up a record.
+
+2007-11-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
+       +folderWithSubscriptionReference:referenceinContainer:aContainer]):
+       fixed a leak.
+
+       * UI/MailPartViewers/UIxMailPartHTMLViewer.m
+       ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
+       character too short, which cause the images not to be displayed
+       sometimes and crashes to happen whenever the references on a
+       message were wrong (due to bugs in SOPE).
+
+       * UI/MailerUI/UIxMailListView.m ([UIxMailListView
+       -hasMessageAttachment]): consider an attachment any content that
+       has a non-nil disposition.
+
+       * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
+       -newFolderWithName:nameandNameInContainer:newNameInContainer]):
+       fixed method to make use of the parameters instead of the useless
+       remains that weren't even initialized.
+
+       * SoObjects/Appointments/SOGoAppointmentObject.m
+       ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
+       don't propagate the event among the attendees if this is not an
+       "so" request.
+       ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
+
+       * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
+       of the new category method below.
+
+       * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
+       -handledByDefaultHandler]): new method that returns whether this
+       is an "so" or alike request.
+
+       * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
+
+       * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
+       -newFolderWithName:nameandNameInContainer:newNameInContainer]):
+       write the new folder's name in the folder cache.
+
+       * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
+       -calendars]): same as below.
+
+       * UI/Contacts/UIxContactsListViewContainer.m
+       ([UIxContactsListViewContainer -currentContactFolderName]):
+       translate the display name if its the default one.
+
+       * SoObjects/Appointments/SOGoAppointmentFolder.m
+       ([SOGoAppointmentFolder -create]): overriden method that invokes
+       its ancestor and then activate itself within the user settings.
+
+       * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
+       -appendPersonalSources]): when the user is the owner of the
+       current folder, we create the "personal" folder if it doesn't
+       exist by invoking "create".
+
+       * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
+       -primaryFetchProfile]): when no row is returned, we initialize
+       "values" to a new dictionary. This solves a bug where the defaults
+       would not be initialized properly.
+
+2007-11-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
+       moved into the SOGoFolder class.
+
+       * SoObjects/Appointments/SOGoAppointmentObject.m
+       ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
+       simplified method by directly building a similar appointment
+       object with the current folder as container.
+
+       * SoObjects/Contacts/SOGoContactLDAPFolder.m
+       ([SOGoContactLDAPFolder
+       -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
+       take the content of an object returned by
+       lookupName:inContext:acquire: instead of the dictionary passed as
+       parameter since it represents a flattened entry return by
+       lookupContactsWithFilter...
+
+       * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
+       category renamed to SOGoFolder+CardDAV.
+
+       * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
+       SOGoObject, but of SOGoFolder instead.
+
+       * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
+       SOGoGCSFolder, but of SOGoFolder instead.
+
+       * SoObjects/Appointments/SOGoAppointmentFolder.m
+       ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
+       to take the new SOGoParentFolder class into account. Also, create
+       the personal folder if it doesn't exist.
+
+       * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
+       the parent of all SOGo containers.
+
+       * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
+       SOGoGCSFolder.
+
+2007-11-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
+       -getAddressesFromFormValues:_dict]): take NSString and NSArray
+       values. Ignore addresses with a length of 0.
+
+       * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
+       fetch the accounts from the user defaults and create default
+       values if missing.
+
+2007-11-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailPartViewers/UIxMailPartTextViewer.m
+       ([UIxMailPartTextViewer -flatContentAsString]): re-added
+       conversion of line-break to sequences of HTML "BR", with a fast
+       algorithm in C.
+
+       * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
+       -flatContentAsString]): simplified method now that we know
+       -[NSString stringWithData:usingEncodingNamed:] has a more robust
+       implementation.
+
+       * UI/MailerUI/UIxMailListView.m ([UIxMailListView
+       -showToAddress]): the answer is cached.
+
+       * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
+       read "SOGoACLsSendEMailNotifications" from the user defaults to
+       determiner whether to send an email when a user is added or
+       removed from an object's acl.
+
+       * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
+       -contentForEditing]): make sure the htmlContent flag is set to NO
+       when we select the textual part. Also we select only the relevant
+       keys for fetching.
+
+       * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
+       removed method.
+
+       * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
+       method replacing -objectTitle, written like the ones below.
+
+       * UI/MailerUI/UIxMailListView.m ([UIxMailListView
+       -messageSubject]): rewrote method to act the one below.
+
+       * UI/MailPartViewers/UIxMailPartMessageViewer.m
+       ([UIxMailPartMessageViewer -messageSubject]): new method that
+       returns the decoded mail subject or "Untitled" if the subject is
+       empty.
+
+       * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+       -decodedSubject]): new method that invoke -decodedSubject from the
+       NSString and NSData class, depending on the identity of the
+       subject obtained from the envelope.
+
+       * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
+       -subjectForReply]): take the value of -[SOGoMail decodedSubject]
+       instead of the subject of the envelope.
+       ([SOGoMailObject -filenameForForward]): same as above.
+       ([SOGoMailObject -subjectForForward]): same as above.
+
+       * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
+       same as below for NSString.
+
+       * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
+       method that decodes the subject of a mail taken as an NSData
+       instance. Handling the exceptions and the badly formatted headers.
+
+       * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
+
+2007-11-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
+       -deleteEntriesWithIds:ids]): make sure the objects returned by
+       lookupName:... are not instances of NSException.
+
+2007-11-03  Ludovic Marcotte  <ludovic@inverse.ca>
+
+       * UI/Scheduler/UIxAppointmentEditor.m
+       Fixed monthly recurrences support. 
+
+2007-11-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Appointments/SOGoAppointmentObject.m
+       ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
+       sent when modifying an event, when the event was considered
+       relevant. The same thing is now implemented for event deletion.
+
+       * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
+       -primaryFetchProfile]): make sure that the deserialized "values"
+       is an instance of NSMutableDictionary, otherwise we override it
+       with one.
+
+       * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
+       -contentForReply]): make use of the SOGoMailReply WO page.
+
+       * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
+       from SOGoMailForward to handle mail replies instead. Only three
+       methods remaining: date, from and messageBody. The latter is
+       quoted properly.
+
+       * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
+       -fetchMailForForwarding:sourceMail]): fetch attachments for
+       forwarded messages.
+
+       * UI/MailerUI/UIxMailListView.m ([UIxMailListView
+       -hasMessageAttachment]): initialize hasAttachment with "NO" to
+       avoid false positives.
+
+       * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
+       ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
+       set title to an empty string where the event/task summary is null.
+
+       * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
+       -setHeaders:newHeaders]): make sure there is a message id in the
+       headers dictionary, if not, generate one.
+       ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
+       message id from the existing draft.
+       ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
+       message id in the header map.
+
+       * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
+       -deleteFolderAction]): no longer prefix the target folder with
+       "folder".
+
+       * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
+       -listMailboxesAction]): base the folder type on the folder
+       traversal path.
+
+       * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
+       -lookupName:_keyinContext:acquire:_acquire]): compare the full
+       traversal to the potential looked up folder with the special
+       folder names and return an object with the appropriate
+       SOGoMailFolder subclass.
+
+       * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
+       -traversalFromMailAccount]): don't prepend the whole string with
+       "/".
+
+       * SoObjects/Mailer/SOGoMailAccount.m
+       ([-lookupSentFolder:_keyinContext:_ctx])
+       ([-lookupDraftsFolder:_keyinContext:_ctx])
+       ([-lookupTrashFolder:_keyinContext:_ctx])
+       ([-lookupFiltersFolder:_key:_ctx]): removed methods.
+       ([SOGoMailAccount -inboxFolderNameInContext:])
+       ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
+       ([SOGoMailAccount -sentFolderNameInContext:])
+       ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
+       the resulting name with "prefix" since we might return a nested
+       foldername.
+       ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
+       names with "/". Sorts the resulting folder list with
+       localizedCaseInsensitiveCompare: instead of
+       caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
+       that were removed, instead, we choose the appropriate class
+       depending on the folder name. And since we are in SOGoMailAccount,
+       we don't have to compute a traversal path to match the key with
+       the foldernames.
+       ([SOGoMailAccount
+       -folderWithTraversal:traversalandClassName:className]): new method
+       that returns an instance of the specified SOGoMailFolder subclass,
+       based on the traversal path passed as parameter.
+       ([SOGoMailAccount -inboxFolderInContext:_ctx])
+       ([SOGoMailAccount -draftsFolderInContext:_ctx])
+       ([-sentFolderInContext:_ctx])
+       ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
+       -folderWithTraversal:andClassName: method described above.
+
+       * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
+       -primaryFetchProfile]): make use of -[NSPropertyListSerialization
+       propertyListFromData:mutabilityOption:format:errorDescription:] to
+       deserialize the plist. Removed variant for libFoundation since it
+       should support the above.
+       ([AgenorUserDefaults -generateSQLForInsert])
+       ([AgenorUserDefaults -generateSQLForUpdate]): make use of
+       -[NSPropertyListSerialization
+       dataFromPropertyList:format:errorDescription:] to serialize the
+       plist. Removed variant for libFoundation since it should support
+       the above. Escape the backslashes from the resulting string.
+
+2007-10-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
+       SOGoMailFolder: SOGoMailSpecialFolder.
+
+       * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
+       -traversalFromMailAccount]): overridden method that returns the
+       initialized mutable string.
+       ([SOGoMailAccount -allFolderPaths]): take the special folder paths
+       with -traversalFromMailAccount and reposition them at the
+       beginning of the list. By creating the special folders during that
+       request, we also make sure that the folder exists thanks to the
+       new initialisation method of the new "SOGoSpecialMailFolder"
+       class.
+       ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
+       method.
+       ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
+       method.
+       ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
+       longer use lookupImap4Folder.
+       ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
+       method.
+
+       * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
+       -traversalFromMailAccount]): new method that returns the full
+       IMAP4 path to the object.
+
+       * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
+       "superUsernames" after fetching it from the ud.
+
+2007-10-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
+       -eventsListAction]): substitude the start and end date with their
+       UTC counterpart, taking into account the offset from UTC related
+       to those dates instead of the current one. This renders
+       -[UIxCalMainView -userUTCOffset] obsolete because the computings
+       that occured in javascript are now done server-side.
+
+       * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
+       removed obsolete method.
+
+       * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
+       method converting html content to plain text.
+
+       * SoObjects/Mailer/NSString+Mail.[hm]: new category module
+       enhancing NSString with utility methods pertaining to mail handling.
+
+       * SoObjects/Mailer/SOGoMailObject.m
+       ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
+       ([SOGoMailObject
+       -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
+       modified method to be always recursive and to take an array of the
+       accepted mime-types as parameter. The returned array now contains
+       the mime-type as well as the part keys.
+
+       * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
+       -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
+       ([SOGoMailObject -contentForEditing]): rewrote method to take into
+       account the first text/plain part or the first text/html part
+       converted to text/plain with our new -[NSString htmlToText]
+       category method.
+
+       * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
+       "replyToAll:" with YES as parameter instead of NO.
+
+2007-10-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
+       -davContentType]): ignore any possible parameter taken from the
+       mime-info of the body part.
+
+       * UI/MailerUI/UIxMailListView.m ([UIxMailListView
+       -lastFirstMessageNumber]): new accessor that returns the first
+       message number of the last series of messages.
+       ([UIxMailListView -fetchKeys]): request the bodystructure for each
+       listed message.
+       ([UIxMailListView -hasMessageAttachment]): extract the attachment
+       information from the message bodystructure.
+
+2007-10-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
+       -GETAction:]): use the "application/octet-stream" mime type for
+       elements of type "application/x-xpinstall" to avoid confusing
+       Firefox.
+
+       * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
+       ([UIxPreferences -itemMessageCheckText])
+       ([UIxPreferences -userMessageCheck])
+       ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
+       methods for handling the retrieval of new messages automatically.
+
+       * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
+       that returns the interval of time between automatic message
+       retrievals.
+
+       * UI/MailerUI/UIxMailListView.m ([UIxMailListView
+       -defaultAction]): now expunges the last folder marked for expunge.
+
+       * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+       -trashInContext:_ctx]): now marks the container folder for
+       expunge.
+
+       * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
+       -markForExpunge]): new method that marks the folder for the next
+       automatic expunge operation in the user settings.
+       ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
+       takes the last folder marked for expunge, expunges it and removes
+       it from the user settings, if it exists.
+
+2007-10-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailerUI/UIxMailListView.m ([UIxMailListView
+       -messageSubjectCellStyleClass]): added support for replied,
+       forwarded, forwarded and replied mails.
+
+       * SoObjects/Mailer/NSData+Mail.m ([NSData
+       -bodyDataFromEncoding:encoding]): new utility method that decodes
+       the NSData instance properly depending on the encoding string
+       passed as parameter.
+
+       * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
+       -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
+
+       * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+       -stringForData:_datapartInfo:_info]): simplified by invoking
+       -bodyDataFromEncoding: from our new NSData category methods.
+
+       * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
+       -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
+       where only the body part of the first of the keys fetched was
+       returned. Also decodes the body parts properly following their
+       encoding.
+
+       * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
+       extends the NSData class with utility methods useful for handling
+       mail.
+
+2007-10-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/NSArray+Utilities.m
+       ([NSArray -stringsWithFormat:format]): replace instances of NSNull
+       with empty strings.
+
+       * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
+       -keysWithFormat:keyFormat]): replace instances of NSNull with
+       empty strings.
+
+       * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
+       empty, use "c_cn" instead.
+
+       * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
+       ([SOGoMailAccount -draftsFolderInContext:_ctx])
+       ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
+       of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
+       no always be specified from the root instead of sometimes from the
+       INBOX.
+
+2007-10-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
+       ([UIxPageFrame -productLocalizableStrings]): invoke the new
+       +[SOGoUser language] method if the user is nil.
+
+       * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
+       that returns any generically-found language.
+       ([SoUser -language]): modified to call the above.
+       ([SOGoUser -language]): modified to call the above if the user
+       language has a null length.
+
+       * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
+       -davEntityTag]): modified to return the "hash" of the vCard string.
+
+       * UI/MailerUI/UIxMailActions.m ([UIxMailActions
+       -removeAllLabelsAction]): new method that removes all label flags
+       from the associated message.
+       ([UIxMailActions -addLabel1Action]
+       [UIxMailActions -addLabel2Action]
+       [UIxMailActions -addLabel3Action
+       [UIxMailActions -addLabel4Action]
+       [UIxMailActions -addLabel5Action]): new methods that adds label
+       flags to the associated message.
+       ([UIxMailActions -removeLabel1Action]
+       [UIxMailActions -removeLabel2Action]
+       [UIxMailActions -removeLabel3Action
+       [UIxMailActions -removeLabel4Action]
+       [UIxMailActions -removeLabel5Action]): new methods that removes
+       label flags from the associated message.
+
+       * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
+       new accessor that returns the labels associated with the message.
+
+       * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
+       -allFolderPaths]): new method that returns all the paths of all
+       the subfolders of the folder object.
+       ([SOGoMailFolder -allFolderURLs]): new method replacing
+       subfoldersURL.
+
+       * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
+       -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
+       role from its parent folder.
+
+2007-10-19  Francis Lachapelle  <flachapelle@inverse.ca>
+
+       * SoObjects/SOGo/SOGoUser.m 
+       ([SOGoUser -rolesForObject:objectinContext:context]): allow
+       multiple super usernames to be defined. The user default 
+       SOGoSuperUsername is renamed SOGoSuperUsernames and must be
+       an array.
+
+2007-10-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
+       -userInContext:]): override the super method by returning
+       anonymous if the super returns nil.
+
+       * UI/Common/UIxPageFrame.m ([UIxPageFrame
+       -productLocalizableStrings]): new method that returns the
+       product-specific translation dictionary as a JSON hash.
+       ([UIxPageFrame -commonLocalizableStrings]): same as above but for
+       the "Common" framework.
+       ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
+       the requestor components to require additional Javascript files.
+       This is useful now that all the scripts are loaded at the end of
+       the HTML code.
+       ([UIxPageFrame -additionalJSFiles]): new getter related to the
+       above.
+
+2007-10-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
+       implemented new web method.
+
+       * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+       -copyToFolderNamed:folderNameinContext:]): new method with the
+       code cut/pasted from -moveToFolderNamed:inContext:.
+       ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
+       modified to use the code from -copyToFolderNamed:inContext:, which
+       is common between the two actions.
+
+       * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
+       ([SOGoMailAccount -sentFolderNameInContext:])
+       ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
+       the user settings into account.
+
+       * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
+       ([UIxMailFolderActions -setAsSentFolderAction])
+       ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
+       that change the purpose of the active folder to "Sent", "Drafts"
+       or "Trash".
+
+       * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]): 
+       returns the subject as quoted-printable.
+
+       * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
+       SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
+       the "aclMethod" method for the subsequent language-dependent
+       subclasses.
+
+       * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
+       returns the subject as quoted-printable.
+
+       * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
+       -dealloc]): release item, aptStartDate and aptEndDate.
+
+2007-10-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
+       -initWithName:newNameinContainer:newContainer]): the owner of a
+       shared folder is set to "nobody" by default.
+
+       * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
+       that returns whether the object has an owner or not.
+
+2007-10-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
+       the folder even if the current user is not its owner.
+
+2007-10-10  Ludovic Marcotte  <ludovic@inverse.ca>
+
+       * We now send advisory emails when folders
+         are created / deleted.
+
+       * Fixed the sending of advisory emails upon
+         ACL changes on folders.
+
+2007-10-10  Ludovic Marcotte  <ludovic@inverse.ca>
+
+       * UI/Scheduler/UIxComponentEditor.m
+       Implemented event/task priority support.
+
+       * SoObjects/Contacts/SOGoContactGCSFolder.m
+       Added CardDAV support. 
+
+       * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
+       Implemented From: based on LDAP results based on
+       the MailFieldNames attribute (an array) specified
+       in every LDAP-based authentication sources.
+
+       * UI/MailPartViewers/UIxMailPartTextViewer.m and
+         UI/WebServerResources/MailerUI.css
+       We avoid replacing "\r\n" and "\n" with <br /> and
+       rather use CSS capabilities for proper formatting.
+       This is _WAY_ faster on very large mails.
+2007-10-10  Francis Lachapelle  <flachapelle@inverse.ca>
+
+       * UI/Scheduler/UIxComponentEditor.m
+       ([UIxComponentEditor -componentCalendar]): returns the calendar
+       object of the current event.
+
+2007-10-05  Ludovic Marcotte  <ludovic@inverse.ca>
+
+       * UI/WebServerResources/MailerUI.js
+       We check if at least one message is selected
+       before performing a Reply/Reply All/Forward
+       
+       * SoObjects/Appointments/SOGoAppointmentFolder.m
+       and others - implemented support for recurring
+       events (with some known limitations right now,
+       all soon to be fixed).
+       
+2007-10-04  Francis Lachapelle  <flachapelle@inverse.ca>
+
+       * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
+       the constraint that a username can't start with a digit.
+
+2007-10-02  Francis Lachapelle  <flachapelle@inverse.ca>
+
+       * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
+       repository to Inverse's branch.
+
+2007-09-28  Francis Lachapelle  <flachapelle@inverse.ca>
+
+       * SoObjects/Mailer/SOGoDraftObject.m 
+       ([SOGoDraftObject -isValidAttachmentName:_name]): removed
+       constraint on space in file name.
+       ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
+       now removes from file name all characters preceding a backslash.
+       This happens with IE7 because the complete attachment file path
+       is sent.
+
+2007-09-25  Francis Lachapelle  <flachapelle@inverse.ca>
+
+       * SoObjects/Appointments/SOGoAptMailNotification.m 
+       ([SOGoAptMailNotification -appointmentURL]): set personal as the
+       default calendar where to add the event.
+
+       * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]): 
+       activate the SOGoUIxDefaultModule user defaults.
+
+2007-09-21  Francis Lachapelle  <flachapelle@inverse.ca>
+
+       * UI/SOGoUI/UIxComponent.m 
+       ([UIxComponent -shortUserNameForDisplay]): returns the string
+       "wrongusernamepassword" when authentication failed.
+
+2007-09-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailPartViewers/UIxMailPartICalViewer.m
+       ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
+       entry of the Calendars parent folder.
+
+       * UI/MailerUI/UIxMailListView.m ([UIxMailListView
+       -messageSubject]): new accessor method to work-around a problem
+       within SOPE where a subject could be returned as an NSData.
+
+       * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
+       -appendPersonalSources]): make sure the value of the "c_path4" of
+       the returned rows are not NSNull, otherwise, discard them.
+
 2007-09-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
 
        * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
 2006-09-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
 
        * UI/Contacts/UIxContactView.m: added many wrapper methods to
-       display blocks of data à la Thunderbird Addressbook. If data is
+       display blocks of data à la Thunderbird Addressbook. If data is
        available, those wrappers (around the NGVCard methods) will
        enclose the results in a proper HTML output with the correct label
        (if present), otherwise it will return an empty string.