+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]):
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.