+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