+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