]> err.no Git - scalable-opengroupware.org/blobdiff - ChangeLog
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1247 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / ChangeLog
index 0a9ea4df2d7067706b96f3944d8971efdd0f4e62..392b9c753b29d4c7bb942f6ca52fd514907ab614 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+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
+       -compare:otherFolder]): new overriden method that compares two
+       contact foldes based on their class and then transfer the control
+       to the super method in SOGoFolder.
+
+       * SoObjects/Contacts/SOGoContactLDAPFolder.m
+       ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
+       compare two contact folders based on their class and then their
+       display name.
+
+       * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
+       new method for sorting folders. The folders are compared based on
+       their ownership, whether they are a main folder and finally
+       depending on their display name.
+
+       * SoObjects/SOGo/SOGoObject.m ([SOGoObject
+       -pathArrayToSOGoObject]): do not reorder the paths if the third
+       element is an instance of NSNull.
+
+       * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
+       -subFolders]): returns a sorted array using the "compare:"
+       selector.
+
+2007-09-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
+       -calendars]): also returns the owner of the listed folders.
+
+       * SoObjects/Appointments/SOGoAppointmentFolder.m
+       ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
+
+       * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
+       method into UIxFolderActions.
+
+       * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
+       -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
+       freebusy info from the "personal" calendar.
+
+       * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
+       -createFolderAction]): new standardized method for requesting
+       folder creations among gcs-based modules.
+
+       * UI/Common/UIxParentFolderActions.[hm]: new action class module.
+
+       * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
+       module, equivalent to the SOGoParentFolder's child
+       SOGoContactFolders, but for calendars.
+
+       * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
+       method that returns translated strings for controller bundles
+       (same as what UIxComponent does for view bundles).
+       ([SOGoObject -pathArrayToSOGoObject]): new method that returns
+       the real path to a subscribed folder (if subscribed).
+       ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
+       ([SOGoObject -globallyUniqueObjectId]): new instance method
+       calling its class equivalent.
+
+2007-09-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
+       whether the user is logged in and if so, redirect to his/her
+       homepage.
+       ([SOGoRootPage -appendToResponse:inContext:]): removed useless
+       method.
+
+2007-09-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
+       +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
+       new method.
+       ([SOGoFolder -displayName]): new method.
+       ([SOGoFolder -delete]): accept to proceed only if nameInContainer
+       != "personal".
+
+       * SoObjects/Contacts/SOGoContactLDAPFolder.m
+       ([SOGoContactLDAPFolder
+       +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
+       renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
+
+       * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
+       +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
+       removed method, reimplemented in SOGoFolder.
+       ([SOGoContactGCSFolder -displayName]): removed method,
+       reimplemented in SOGoFolder.
+       ([-delete]): removed method, modified in SOGoFolder.
+
+       * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
+       a subclass of SOGoParentFolder.
+
+       * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
+       from SOGoContactFolders and modified to be more content-independent.
+
+       * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
+       ([UIxMailActions -markMessageReadAction]): new methods moved from
+       UIxMailListView and adapted to invoke the client object directly,
+       since the previous versions had to to a lookup from the parent
+       SOGoMailFolder.
+
+       * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
+       method into UIxMailActions.
+       ([-markMessageReadAction]): same as above.
+       ([-viewAction]): removed useless method.
+       ([-javaScriptOK]): removed useless method.
+       ([-isJavaScriptRequest]): removed useless method.
+       ([-lookupActiveMessage]): removed useless method.
+
+       * UI/Common/WODirectAction+SOGo.m ([WODirectAction
+       -responseWithStatus:status]): new method that returns a WOResponse
+       initialized with the specified status code.
+       ([WODirectAction -responseWith204]): new method that invokes the
+       above one with "204" as parameter.
+       ([WODirectAction -redirectToLocation:newLocation]): rewrote method
+       to make use of -responseWithStatus:.
+
+       * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
+       method that returns a WOResponse initialized with the 204 status
+       code.
+       
+       * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
+       always use a "not deleted" search qualifier along with the user
+       qualifier (if present).
+
+2007-09-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
+       -contactSearchAction]): only return the records which have an
+       email set.
+
+       * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+       -trashInContext:_ctx]): no longer expunge the mailbox after
+       marking a message deleted.
+       ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
+       as above.
+
+       * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
+       ([-trashAction]): moved method into UIxMailActions.
+       ([-moveAction]): moved method into UIxMailActions.
+
+2007-09-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailPartViewers/UIxMailPartHTMLViewer.m
+       ([_UIxHTMLMailContentHandler
+       -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
+       comments from the CSS code, do not add the CSS code to the body
+       content and remove references of body from the CSS declarations.
+       ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
+       ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
+       common with cssContent in a different method and invoke it only
+       once.
+
+       * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
+       instead of UIxPageFrame.
+
+2007-09-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
+       ([-appendToResponse:responseinContext:ctx]): commented out.
+       ([SOGoRootPage -connectURL]): new accessor that returns the full
+       url the the "connect" method.
+       ([-connectAction]): rewrote method to return a properly formatted
+       auth. cookie based on the username and password passed as
+       parameter.
+
+       * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
+       set the value of the cookie to "discard" and set its expiration
+       date to yesterday.
+
+       * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
+       -preprocessCredentialsInContext:context]): consider the user
+       anonymous if the cookie value is "discard".
+       ([SOGoWebAuthenticator
+       -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
+       set the expiration date of the cookie to yesterday.
+
+       * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
+       returns the path to the application if the clientObject is not a
+       SOGoObject.
+
+       * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
+       moved the requirement of authentication from the SOGo application
+       class to here.
+
+       * SoObjects/Appointments/SOGoAppointmentObject.m
+       ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
+       check whether the new appointment object is still relevant before
+       sending a notification.
+
+2007-09-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
+       -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
+       render the login page through the SoDefaultRenderer.
+
+       * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
+       -isPublicInContext:localContext]): new overriden method that
+       returns YES.
+
+       * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
+       -currentCalendarLogin]): replace css-unsafe characters with _.
+
+       * UI/SOGoUI/UIxComponent.m ([UIxComponent
+       -shortUserNameForDisplay]): simplified method.
+       ([-user]): removed method since [context activeUser] is as useful.
+
+2007-09-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
+       set the cookie path to "/".
+
+       * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
+       authenticator based on the request handler key. "dav" returns the
+       SOGoDAVAuthenticator, anything else returns the Web authenticator.
+
+       * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
+       "SOGoAuthenticator".
+
+       * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
+       implementing a subclass of SoCookieAuthenticator, designed for
+       web-based cookie authentication of users.m
+
+       * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
+       new method that resets the authentification cookie.
+
+2007-08-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/LDAPSource.m ([LDAPSource
+       -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
+       didBind to NO to make sure no false authentication is returned if
+       the bind operation is not executed.
+
+2007-08-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Mailer/SOGoDraftObject.m: added support for the
+       "In-Reply-To" header field when replying.
+
+       * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
+       table field names that are queried.
+
+       * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
+       -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
+       add the "c_" prefix to the quick table field names that are
+       queried.
+
+2007-08-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Appointments/SOGoAppointmentFolder.m
+       ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
+       "personal" to the ocs path of the appointment folder.
+
+       * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
+       -flatContentAsString]): use latin1 when the encoding is not
+       specified, and to reencode data chunk which were not correctly
+       decoded with the original charset.
+
+       * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
+       ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
+       ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
+       ([SOGoAppointmentFolder
+       -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
+       override those methods to use the "personal" additional directory.
+
+       * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
+       append "/personal" to the calendar path to simulate a single
+       calendar in a choice of many.
+
+       * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
+       -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
+       methods back here. Moved the folder existence check here, and do
+       it on self only when the lookup happens for a non-folder object.
+       This permits to accept entries for folders with parents who
+       don't really exist.
+
+2007-08-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
+       -shouldTakeValuesFromRequest:requestinContext:context]): same as
+       below.
+
+       * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
+       -shouldTakeValuesFromRequest:requestinContext:context]):
+       redesigned method since any method called can be received from a
+       POST or a GET. Instead we check the method call itself and we
+       accept only if it has the "save" prefix.
+
+       * SoObjects/Appointments/SOGoAptMailNotification.m
+       ([SOGoAptMailNotification -getSubject]): returns the subject an a
+       quoted-printable encoded string, if needed.
+
+       * SoObjects/Mailer/SOGoDraftObject.m ([NSString
+       -asQPSubjectString:encoding]): moved method into
+       NSString+Utilities.m.
+
+2007-08-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
+       -messageForwardingList])
+       ([UIxPreferences -itemMessageForwardingText])D
+       ([UIxPreferences -userMessageForwarding])
+       ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
+       new template methods for manage the user preference regarding
+       message forwarding.
+
+       * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
+       algorithm to return, in order, the user's defined language or the
+       first browser language or, finally, the default language.
+       ([SOGoUser -messageForwarding]): new method that returns the user
+       preference for message forwarding: "inline" or "attached",
+       defaulting to "attached".
+
+       * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
+       -contentForInlineForward]): new method that returns the content of
+       the message for inline forwarding based on the SOGoMailForward
+       templates.
+
+       * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
+       -fetchMailForForwarding:sourceMail]): check the user preference
+       for message forwarding and compose inline forwarded messages if required.
+
+       * SoObjects/Appointments/SOGoCalendarComponent.m
+       ([SOGoCalendarComponent
+       -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
+       now use a template based on the language returned from the
+       SOGoUser object.
+
+       * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
+       a subclass of SOGoMailForward for English locale.
+
+       * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
+       a subclass of SOGoMailForward for French locale.
+
+       * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
+       helps build template for inline forwarded messages.
+
+2007-08-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/SOGoElements/SOGoIEConditional.m: new extension module class
+       to handle "<var:if-ie>" template tags.
+
+       * UI/SOGoElements: new extension bundle containing sogo-specific
+       dynamic elements.
+
+       * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
+       -takeValuesFromRequest:_rqinContext:_ctx]): save the category
+       selected in the dialog.
+       ([UIxComponentEditor -setComponent:newComponent]): retrieve the
+       first category, if ever, of the calendar entity.
+
+       * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
+       -composeAction]): restored method since it is needed by the
+       address book.
+
+       * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
+       -composeAction]): the address fields should be arrays and not
+       simple strings.
+
+       * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
+       that returns the build date of SOGo in the template.
+
+2007-08-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
+       -_flattenedRecords:records]): when the c_cn field is empty,
+       returns set a formatted string with the concatenation of
+       c_givenname and c_sn as the displayName.
+
+       * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
+       -isValidMailAccountName:_key]): prevent unknown accounts from
+       being accessed.
+
+       * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
+       -pathToAttachmentObject]): we no longer need the filename
+       extension for SoLookup...
+
+       * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
+       -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
+       filename to have an extension, and thus accept any filename.
+
+       * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
+       -currentCName]): new method that returns the c_name of the
+       contact, correctly escaped to be passed by url afterwards.
+
+       * UI/MailPartViewers/UIxMailPartHTMLViewer.m
+       ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
+       instance of [self decodedFlatContent] instead of the buggy
+       NSString from [super flatContentAsString] to the parser.
+
+2007-08-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
+       new category method to reponds to the "delete" web command on
+       drafts.
+       ([UIxMailActions -deleteAttachmentAction]): new category method to
+       reponds to the "deleteAttachment" web command on drafts, taking
+       the "filename" url parameter into account.
+
+       * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
+       -contentForEditing]): new method that retrieve the editable mail
+       content.
+       ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
+       returns the body keys for attached files (parts with a "filename"
+       attribute).
+
+       * SoObjects/Mailer/SOGoDraftObject.m ([NSString
+       -asQPSubjectString:encoding]): do not change the string if the
+       encoded string has the same length (which means it is already
+       7bit-safe).
+       ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
+       that retrieve a draft along with its attachments for editing.
+       ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
+       choke if the "to" header field is empty.
+       ([SOGoDraftObject -delete]): new method to delete the draft folder
+       whenever operations are done.
+
+2007-08-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
+       useless stub method, of which the intention was implemented in
+       SOGoDraftObject.
+       ([-lookupSentFolderUsingAccount]): removed obsolete method.
+       ([-selectedMailIdentity]): removed obsolete method.
+       ([-lookupSentFolderUsingFrom]): removed obsolete method.
+       ([-storeMailInSentFolder:_path]): removed obsolete method, of
+       which the mechanism has been put in -[SOGoDraftObject sendMail]
+       method.
+       ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
+       ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
+       adapted algorithms to the new SOGoDraftObject methods.
+       ([-deleteAction]): removed method since local draft objects cannot
+       be removed by the user.
+
+       * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
+       -expungeAction]): new method replacing the one previously found in
+       UIxMailListView.
+       ([UIxMailFolderActions -createFolderAction])
+       ([UIxMailFolderActions -renameFolderAction])
+       ([UIxMailFolderActions -deleteFolderAction])
+       ([UIxMailFolderActions -emptyTrashAction])
+       ([UIxMailFolderActions -subscribeAction])
+       ([UIxMailFolderActions -unsubscribeAction]): error situations
+       should have http return code 500 instead of 403.
+
+       * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
+       -composeAction]): new method replacing the one previously in
+       UIxMailMainFrame.
+
+       * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+       -imap4URLString]): removed overriden method (see below).
+
+       * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
+       cache the mailbox acl.
+       ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
+       ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
+       acl cache.
+       ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
+       the new method of determining the users mail accounts.
+
+       * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
+       longer adds a "/" at the end of the string (the default for
+       folders), therefore this will be overriden in SOGoMailFolder
+       rather than in SOGoMailObject.
+
+       * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
+       method, moved into the new UIxMailActions module class.
+
+       * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
+       -newDraft]): new method that returns a new SOGoDraftObject
+       instance with a unique filename based on the current timestamp and
+       the "newDraft" prefix.
+       ([SOGoDraftsFolder
+       -lookupName:nameinContext:localContextacquire:acquire]): overriden
+       method by detecting local drafts with their "newDraft" prefix.
+       ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
+
+       * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
+       from scratch by making it a subclass of SOGoMailFolder.
+
+       * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
+       module.
+
+       * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
+       module.
+
+       * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
+       module.
+
+       * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
+       new method, initializing the new ivars: IMAP4ID, headers, text,
+       sourceURL and sourceFlag.
+       ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
+       ([-_ensureUserSpoolFolderPath])
+       ([-saveMimeMessageToTemporaryFileWithHeaders:])
+       ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
+       ([-deleteTemporaryMessageFile:], [-delete], [-content])
+       ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
+       ([-uid], [-flags], [-size], [-envelope]): removed methods.
+       ([SOGoDraftObject -storeInfo]): rewrote method to take the new
+       ivars into account.
+       ([SOGoDraftObject -setSourceURL:newSourceURL])
+       ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
+       methods to store the url of the original message between accesses
+       so that, depending on the action taken (forward or reply), the
+       correct flag can be given.
+       ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
+       the imap4 id that is returned for the message whenever it is saved
+       into the drafts folder.
+       ([SOGoDraftObject -save]): new method that takes in charge the
+       saving of the message in the IMAP drafts folder.
+       ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
+       new method that fills the original data of the new message with
+       the reply content of the original message.
+       ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
+       above for message forwarding.
+       ([-spoolFileManager]): removed useless method (only returned the
+       default filemanager...)
+       ([SOGoDraftObject -mimeMessageAsData]): new method that returns
+       the resulting message as an NSData chunk.
+
+       * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
+       containing a rewrite of the mail action methods found in
+       UI/Mailer/, that needed to be put in the SOGoMailObject class.
+       ([SOGoMailObject -subjectForReply]): new method that returns a
+       subject suitable for replies.
+       ([SOGoMailObject -contentForReply]): new method that returns the
+       textual content of an email, quoted for replying.
+       ([SOGoMailObject -filenameForForward]): new method that returns
+       the name of the filename that should contain the forwarded
+       message, based on its subject.
+       ([SOGoMailObject -subjectForForward]): explicit.
+
+2007-08-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
+       -mailAccounts]): rewrote method to return the name of the mail
+       accounts now available with the -[SOGoUser mailAccounts] method.
+       ([UIxMailMainFrame -showLinkBanner]): removed method.
+       ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
+       ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
+       ([UIxMailMainFrame -rootURL]): removed method.
+       ([UIxMailMainFrame -userRootURL]): removed method.
+       ([UIxMailMainFrame -calendarRootURL]): removed method.
+       ([UIxMailMainFrame -contactsRootURL]): removed method.
+       ([UIxMailMainFrame -hasErrorText])
+       ([UIxMailMainFrame -errorText])
+       ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
+       ([-composeAction]): removed method. Now provided by
+       UIxMailAccountActions.
+       ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
+       ([UIxMailMainFrame -hideFolderTree]): removed method.
+       ([UIxMailMainFrame -treeRootClassName]): removed method.
+       ([UIxMailMainFrame +initialize]): removed method.
+       SOGoMailTreeRootClass userdefaults will no longer have any effect.
+
+       * UI/Common/WODirectAction+SOGo.m ([WODirectAction
+       -redirectToLocation:newLocation]): new method that implements the
+       same functionality as WOComponent.
+
+       * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
+
+       * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
+       method that returns whether the current mail is store in the
+       drafts folder hierarchy.
+
+       * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
+       ([-primaryEmail]): removed method.
+       ([SOGoUser -primaryIMAP4AccountString]): removed method.
+       ([SOGoUser -mailAccounts]): new method that returns an array
+       containing description dictionaries for all the user mail
+       accounts. Each account also contain the user's identities for that
+       account.
+       ([SOGoUser -allIdentities]): new utility method that returns all
+       the user identities on all accounts.
+       ([SOGoUser -primaryIdentity]): new method return the first
+       identity of the first account.
+
+       * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): 
+
+       * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
+       -isInDraftsFolder]): returns NO.
+       ([-preferredIdentity]): removed method, replaced with -[SOGoUser
+       primaryIdentity].
+       ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
+
+       * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
+       -isInDraftsFolder]): new method that detects if self is contained
+       by the drafts folder by calling itself on the container object.
+
+       * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
+       removed method.
+       ([-fetchIdentitiesWithEmitterPermissions]): removed method.
+       ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
+       return the name of the mail accounts now available with the
+       -[SOGoUser mailAccounts] method.
+
+       * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
+       extension module.
+
+       * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
+       module.
+
+       * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
+       -keysWithFormat:format]): method that forward the method of the
+       same name to each member of the array, considering they all are
+       instances of NSDictionary.
+       ([NSArray -objectsForKey:key]): same principle as above.
+       ([NSArray -flattenedArray]): new method that transforms an array
+       of arrays into a single array containing all the elements of the
+       subarrays.
+
+       * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
+       -keysWithFormat:keyFormat]): new method inspired by the python
+       string formatting system and which replaces occurences of "%{key}"
+       by the corresponding keys.
+
+2007-08-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * Main/SOGo.m ([SOGo -run]): check for channel-type specific
+       sql script before the generic one when initializing mandatory
+       system tables.
+
+2007-08-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/NSString+Utilities.m ([NSString
+       -pureEMailAddress]): new utility method inspired by the
+       "_rawSender" private method in SOGoDraftObject, which it now
+       replaces.
+
+       * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
+       provides a common API for sending emails, no matter what the
+       transport is.
+
+2007-08-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
+       -quotasAction]): invoke "relativeImap4Name" instead of
+       "nameInContainer" since the latter also returns the "folder"
+       prefix.
+
+       * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
+       -listMailboxesAction]): declare the output as text/plain in UTF-8.
+
+       * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
+       -deleteFolderAction]): fixed the url of the destination folder.
+
+       * Main/SOGo.m ([SOGo +initialize]): show the build date and
+       hostname at startup.
+
+2007-08-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Appointments/SOGoCalendarComponent.m
+       ([SOGoCalendarComponent
+       -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
+       set the mail date to the current date string returned by our
+       rfc822DateString extension method.
+
+       * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
+       -_gcsFoldersFromFolder:): ignore the personal folders who are
+       returned but don't really exist.
+
+2007-08-02  Francis Lachapelle  <flachapelle@inverse.ca>
+
+       * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
+       has to return only one element.
+
+2007-08-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
+       -content]): new method returning the decoded content of the
+       corresponding attachment as an NSData instance.
+       ([UIxMailPartViewer -filename]): if the "filename" parameter of
+       the metadata parameterList is empty, try to find out the filename
+       from the "disposition" metadata returned with the BODYSTRUCTURE
+       imap4 tag.
+
+       * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
+       -composeAction]): prefix the INBOX folder with "folder".
+
+       * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
+       -relativeImap4Name]): return nameInContainer stripped from its
+       first 6 characters since all folder names are prefixed with
+       "folder".
+
+       * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
+       -imap4URLString]): invoke -relativeImap4Name instead of
+       "nameInContainer" since the former will return the fixed IMAP4
+       foldername and the latter the SoObject name.
+
+       * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+       +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
+
+       * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
+       ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
+       ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
+       ([SOGoMailAccount -sentFolderNameInContext:])
+       ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
+       names with "folder".
+       ([SOGoMailAccount -inboxFolderInContext:_ctx])
+       ([SOGoMailAccount -sentFolderInContext:_ctx])
+       ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
+       the folder names with "folder" since they are prefixed earlier.
+
+2007-07-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
+       ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
+       all starts with "folder".
+
+       * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
+       longer declare security info from here.
+
+       * SoObjects/Mailer/SOGoMailFolder.m
+       ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
+       ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
+       folder names now always start with "folder".
+
+       * SoObjects/Mailer/SOGoMailAccount.m
+       ([-lookupName:inContext:acquire:]): folder names now always start
+       with "folder".
+
+2007-07-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
+       -forwardAction]): adapted to the new saveAttachment:withMetadata:
+       method (see below).
+
+       * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
+       code to save the attached filenames with the filename returned by
+       the web server as well as their mime types.
+
+       * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
+       ([UIxMailPartMessageViewer -toAddresses])
+       ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
+       the corresponding fields separated with a ", " (if needed).
+
+       * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
+       -saveAttachment:_attachwithMetadata:metadata]): new method
+       replacing -saveAttachment:withName: and which takes a dictionary
+       as parameter with the filename and the mime type of the
+       attachment.
+       The mimetype is then saved in a hidden text file.
+       ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
+       take the mime type from the hidden text file related to the
+       attachment.
+
+       * SoObjects/Contacts/SOGoContactGCSFolder.m ()
+       ([SOGoContactGCSFolder
+       -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
+       return records if the db records are > 0 and not just > 1...
+
+2007-07-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
+       method.
+       ([UIxContactsListView -defaultSortKey]): changed to "displayName".
+
+       * SoObjects/Contacts/SOGoContactLDAPFolder.m
+       ([SOGoContactLDAPFolder
+       -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
+       translate the returned records to a normalized form.
+
+       * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
+       -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
+       translate the returned records to a normalized form.
+
+       * UI/Scheduler/UIxCalListingActions.m,
+       UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
+       SoObjects/SOGo/AgenorUserDefaults.m,
+       SoObjects/Contacts/SOGoContactGCSFolder.m,
+       SoObjects/Appointments/SOGoAppointmentFolder.m,
+       OGoContentStore/OCSiCalFieldExtractor.m,
+       OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
+       table fields with "c_".
+
+2007-07-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
+       the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
+       the application settings. If set, both limit will influence the
+       maximum size of the resultsets and the time taken to solve them.
+       ([LDAPSource -_initLDAPConnection]): initialize the limits.
+
+2007-07-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
+       method that declares the DAV namespace related to CardDAV.
+       ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
+       method that declares the "access-control" and "addressbook-access"
+       classes to the list.
+
+       * SoObjects/Appointments/SOGoAppointmentFolder.m
+       ([-lookupActionForCalDAVMethod:]): removed method.
+       ([SOGoAppointmentFolder -davNamespaces]): added new overriden
+       method that declares the DAV namespace related to CalDAV.
+
+       * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
+       optional method for subclasses which handle specific extensions to
+       the DAV protocol: CardDAV or CalDAV.
+       ([SOGoFolder
+       -lookupName:lookupNameinContext:localContextacquire:acquire]):
+       new overriden method that handles dav invocations for extensions
+       to DAV by returning an appropriate SoSelectorInvocation.
+
+       * SoObjects/SOGo/NSString+Utilities.m ([NSString
+       -asDavInvocation]): new method returning a dictionary with a "ns"
+       key representing the dav namespace and a "method" key representing
+       the dav method name of the request.
+
+       * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
+       +initialize]): scan the value of SOGoUIxUserCanChangePassword.
+       Default is "no".
+       ([UIxPreferences -shouldDisplayPasswordChange]): new template
+       method that returns the value of SOGoUIxUserCanChangePassword.
+
+       * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
+       scan the value of SOGoUIxDefaultModule. If not set, the default
+       module defaults to "Calendar".
+       ([SOGoUserHomePage -defaultAction]): redirect the user to the
+       value of "SOGoUIxDefaultModule".
+
+2007-07-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
+       -contactInfos]): cache the results to avoid multiple invocations.
+
+       * SoObjects/Contacts/SOGoContactLDAPFolder.m
+       ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
+       really should return something or if we fake to return nil...
+
+2007-07-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
+       acceptAnyUser to YES only when the SOGoAuthentificationMethod user
+       default is set to "bypass".
+
+       * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
+       -checkLogin:_loginpassword:_pwd]): accepts unverified connections
+       when authMethod is set to "bypass" from now on. This would avoid a
+       security concern with a default installation of SOGo.
+       AuthentificationMethod is now prefixed with "SOGo" for better
+       clarity.
+
+2007-07-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
+       -quotasAction]): new method that returns a json representation of
+       the mailbox quotas.
+
+2007-07-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
+       -imap4URL]): rewrote method to support accented mailbox names.
+       ([SOGoMailBaseObject imap4Password]): rewrote to simply use
+       SOGoAuthenticator's passwordInContext:.
+
+       * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
+       -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
+       start and due dates to nil if hasStartDate and hasDueDate are
+       false.
+
+       * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
+       -passwordInContext:context]): made method public.
+
+       * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
+       -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
+       to false to avoid a null violation.
+
+2007-07-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+       -contentAsString]): returns the message encoded in ISO Latin 1
+       again.
+
+       * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
+       SOGoSuperUsername user defaults.
+       ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
+       method.
+       ([SOGoUser -rolesForObject:objectinContext:context]): if the
+       current user is the superuser, grant him/her the "owner" role.
+
+       * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
+       the folder only if the current user is the owner of the future
+       folder.
+
+       * SoObjects/Appointments/SOGoCalendarComponent.m
+       ([SOGoCalendarComponent -contentAsString]): we return the content
+       based on the permissions returned by the security manager instead
+       of by looking at the user roles.
+
+       * SoObjects/Appointments/SOGoAppointmentFolder.m
+       ([SOGoAppointmentFolder -calendarFolders]): read the calendar
+       folders of the user to whom this folder belongs instead of the
+       active user. This way, a delegate user will be able to have the
+       same view that the original user has if he connects from his user
+       directory.
+
+       * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
+       user exists before creating the SOGoUserFolder instance. If not,
+       returns nil.
+
+       * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
+       return the message source code in plain text.
+
+       * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+       -contentAsString]): returns the message encoded in UTF8.
+
+2007-07-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * OGoContentStore/iCalRepeatableEntityObject+OCS.m
+       ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
+       leading tagname into account when serializing the element values.
+
+       * Main/SOGoProductLoader.m: only load bundle directories ending
+       with the "SOGo" extension.
+
+       * Main/SOGo.m ([SOGo
+       -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
+       result set if the query has caused no exception. Otherwise we get
+       an "evaluation is in progress exception".
+
+2007-06-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
+       -generateSQLForInsert]): initialize error to nil before the
+       serialization. Otherwise the method can get confused if it ever is
+       initialized to something else.
+
+       * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
+       -folderIsMandatory]): returns NO unconditionnally.
+
+       * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
+       -appendPersonalSources]): add the "personal" folder to the list of
+       user folders even if it doesn't exist, so that it is created when
+       the user accesses it.
+
+       * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
+       -folderIsMandatory]): returns YES if nameInContainer is set to
+       "personal", which is the default address book.
+
+       * SoObjects/Appointments/SOGoAppointmentFolder.m
+       ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
+       users must have one Calendar folder (one and only one).
+       ([SOGoAppointmentFolder -_privacySqlString]): unescape the
+       escaping '\' so make the carriage return a real one. This way,
+       PgSQL 8 won't complain about escaping the string.
+
+       * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
+       method that create the folder if considered mandatory.
+       ([SOGoFolder -folderIsMandatory]): new method that determines
+       whether the folder should be created automatically or not. To be
+       overriden by subclasses.
+
+       * Main/SOGo.m ([SOGo -run]): override method and create the
+       missing system tables if needed.
+
+2007-06-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
+       -mailDateFormatter]): returns the user's date formatter.
+
+       * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
+       applies the user timezone to the date object before returning it.
+
+       * UI/Common/UIxSortButton.m: removed useless class module.
+
+       * UI/Common/UIxSortableTableHeader.m: removed useless class
+       module.
+
+       * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
+       -contactInfos]): use the "asc" url parameter instead of "desc" to
+       determine the ordering.
+       ([-sortOrdering]): removed method.
+       ([UIxContactsListView -init]): removed the "searchText" ivar.
+       (general): the template no longer use the UIxSortableTableHeader
+       components.
+
+       * UI/MailerUI/UIxMailListView.m ([UIxMailListView
+       -defaultSortKey]): default sort following the messages arrival
+       instead of their date.
+       ([-isSortedDescending]): removed method.
+       ([-imap4SortOrdering]): use the "asc" url parameter instead of
+       "desc" to determine the ordering.
+       (general): the template no longer use the UIxSortableTableHeader
+       components.
+
+2007-06-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
+       removed method.
+       ([-setQualifier:_msg], [-qualifier]): removed methods.
+       ([UIxMailListView -defaultAction]): added code to handle the
+       search criteria and value passed as url parameters. Also, we now
+       handle the same search criterias as Thunderbird/Icedove.
+
+2007-06-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
+       -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
+       the string instead of the string itself.
+       ([UIxJSONPreferences -jsonSettingsAction]): same as above.
+
+       * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
+       bool var "acceptAnyUser" that is set when the AuthenticationMethod
+       user default is nil.
+       ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
+       unconditionnally returns an instance whenever acceptAnyUser is set.
+
+2007-06-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * Main/sogod.m (main): prevent SOGo from running as root.
+
+2007-06-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/SOGoUser.m ([SOGoUser
+       -setCurrentPassword:newPassword]): new stub method.
+       ([SOGoUser -dateFormatterInContext:context]): new method that
+       returns an instance of SOGoDateFormatter configured based on the
+       user defaults.
+
+       * UI/Common/UIxPageFrame.m ([UIxPageFrame
+       -relativePreferencesPath]): new method.
+
+       * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
+       removed useless method.
+
+       * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
+       different configurable formats (long and short date + time).
+
+       * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
+
+       * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
+       -isInternetRequest]): removed method.
+
+       * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
+       -jsonRepresentation]): new method with an explicit name.
+
+       * UI/PreferencesUI/product.plist: new bundle that provides a web
+       ui for handling user defaults.
+
+       * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
+
+       * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
+
+       * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
+
+2007-06-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
+
+2007-06-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/Scheduler/NSArray+Scheduler.m ([NSArray
+       -compareEventsAscending:otherEvent]): no longer use compare: on
+       the time objects since one of them could be an NSNull, which
+       crashes when comparing with anything.
+
+       * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
+       -eventsListAction]): sort events from here.
+       ([UIxCalListingActions -tasksListAction]): sort tasks from here.
+
+       * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
+       module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
+
+       * SoObjects/Appointments/SOGoAppointmentFolder.m
+       ([SOGoAppointmentFolder
+       -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
+       no longer sort elements from here.
+
+2007-06-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
+       -aclsForUser:uid]): implemented method by forwarding the request
+       to the container. This fixes a bug where users could no longer
+       read emails from shared folders.
+
+       * SoObjects/Appointments/SOGoCalendarComponent.m
+       ([SOGoCalendarComponent -init]): "isNew" is no longer defined
+       here, but rather in its parent class.
+
+       * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
+       -stringForSecondsSinceThe70s:seconds]): new utility method.
+
+       * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
+       -eventsListAction]): no longer reduce the end day of one day for
+       all day events since everything has been fixed in
+       OCSiCalFieldExtractor.
+
+       * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
+       -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
+       the end date of all day events of 1 so that they stay on their
+       real last day.
+
+2007-06-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
+
+       * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
+       removed method.
+       ([-fetchCoreTasksInfos]): removed method.
+
+       * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
+       -init]): initialize an instance of SOGoDateFormatter.
+       ([UIxCalListingActions -eventsListAction]): the display start and
+       end dates are added to the listing for each event.
+
+       * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
+
+       * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
+       -isAllDay]): returns YES if the "hm" url parameter is set to
+       "allday".
+       ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
+       is displayed one day earlier.
+
+2007-06-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
+       -_setupContext]): take the range of dates specified by the popup
+       into account.
+
+       * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
+       WODirectAction that returns WOResponse objects with the events or
+       todos satisfying the parameters passed in the url.
+
+       * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
+       -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
+       "isAllDay" into account and compute the amount of days to pass to
+       the iCalEvent.
+
+2007-06-06  Francis Lachapelle <flachapelle@inverse.ca>
+
+       * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
+       * SoObjects/SOGo/NSNull+Utilities.m: initial import.
+       * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]): 
+       new method that returns a json-formatted array of the visible tasks
+       for the current user.
+
+2007-06-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
+       object must be present in the list of UIDs we delete the object
+       from. Otherwise Calendar objects having no organizer and no
+       attendees will remain in their owner's Calendar.
+
+       * SoObjects/SOGo/SOGoObject.m ([SOGoObject
+       -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
+       first 3 elements of the path array if the url returned by
+       baseURLInContext: returns a hostname.
+
+       * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
+       -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
+       nil, in which case a crash happens when calling hasPrefix:.
+       ([SOGoMailFolder -_sharesACLs]): same as above.
+       ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
+       otherUsersFolderName is nil, we return nil.
+       ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
+       nil from [self otherUsersPathToFolder], we return nil too.
+
 2007-06-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
 
        * SoObjects/SOGo/SOGoObject.m ([SOGoObject
 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.