X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ChangeLog;h=b865d14f9149a605fd176ada094d7eae3f1e5176;hb=9ffb01af574e6040e0243b50590311baa6d449c0;hp=711bd8747f54854cc255a84f27c3dbe874fc510a;hpb=933aa8e2a9ab891ee5b504e0aaa53089b523c7e4;p=scalable-opengroupware.org diff --git a/ChangeLog b/ChangeLog index 711bd874..b865d14f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,2785 @@ +2007-11-01 Wolfgang Sourdeau + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create + the folder even if the current user is not its owner. + +2007-10-10 Ludovic Marcotte + + * 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 + + * 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
and + rather use CSS capabilities for proper formatting. + This is _WAY_ faster on very large mails. + +2007-10-10 Francis Lachapelle + + * UI/Scheduler/UIxComponentEditor.m + ([UIxComponentEditor -componentCalendar]): returns the calendar + object of the current event. + +2007-10-05 Ludovic Marcotte + + * 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 + + * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed + the constraint that a username can't start with a digit. + +2007-10-02 Francis Lachapelle + + * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk + repository to Inverse's branch. + +2007-09-28 Francis Lachapelle + + * 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 + + * 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 + + * UI/SOGoUI/UIxComponent.m + ([UIxComponent -shortUserNameForDisplay]): returns the string + "wrongusernamepassword" when authentication failed. + +2007-09-17 Wolfgang Sourdeau + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * UI/SOGoElements/SOGoIEConditional.m: new extension module class + to handle "" 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]): + has to return only one element. + +2007-08-01 Wolfgang Sourdeau + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions + -quotasAction]): new method that returns a json representation of + the mailbox quotas. + +2007-07-10 Wolfgang Sourdeau + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * Main/sogod.m (main): prevent SOGo from running as root. + +2007-06-19 Wolfgang Sourdeau + + * 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 + + * SoObjects/SOGo/SOGoLRUCache.m: removed unused module. + +2007-06-13 Wolfgang Sourdeau + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * SoObjects/SOGo/SOGoObject.m ([SOGoObject + -_urlPreferringParticle:expectedoverThisOne:possible]): unescape + the result of [self baseURLInContext:] to avoid a double escaping + in the resulting string. + + * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if + the user has the "ObjectReader" role on the parent container, then + he is granted the "ObjectViewer" role on this object. Same for + "ObjectEraser", although this might change later. + + * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor + -toolbar]): determine the toolbar filename based on the + permissions declared by the securitymanager. The role mechanism + has been adjusted on a lowerlevel so we can simplify the code. + + * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject + -initWithName:newNameinContainer:newContainer]): read the content + directly from here. That way we can determine whether the object + is being created. + ([SOGoContentObject -aclsForUser:uid]): if the object is new and + the ObjectCreator role is enabled, we also grant the ObjectEditor + role to the current user. + + * UI/Common/UIxFolderActions.m ([-canAccessContentAction]): + changed the method paradigm to only return HTTP code 204. Not test + is done whatsoever since the security manager does it for us. + + * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]): + removed method because the same exists in UIxFolderActions.m + + * UI/Contacts/UIxContactsUserRightsEditor.m + ([UIxContactsUserRightsEditor + -setUserCanReadObjects:userCanReadObjects]): new method. + + * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and + "FolderEraser" and special permission "Access Object". Removed + role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser" + can be used instead. Removed "FolderReader" since it is useless. + + * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry + -vCard]): directly use the "content" ivar since it is initialized + during object creation. + + * SoObjects/Contacts/SOGoContactLDAPFolder.m + ([SOGoContactLDAPFolder -init]): no longer handle the + nameInContainer no the container ivars. They were removed because + this class is a descendant of SOGoObject which already has them. + ([SOGoContactLDAPFolder -davDisplayName]): new overriden method + returning "displayName". + ([SOGoContactLDAPFolder -isFolderish]): new overriden method + returning "YES". + + * SoObjects/Appointments/SOGoCalendarComponent.m + ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out. + ([SOGoCalendarComponent -findParticipant:user]): new name for + method "participant:". + ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as + findparticipant but taking a uid string as parameter. + ([SOGoCalendarComponent -contentAsString]): don't regenerate the + iCalendar automatically. Instead, this is done only when the user + is a "date and time viewer". + ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles + (modifier and responder) into account by compiling them with the + owner's roles. + + * SoObjects/Contacts/SOGoContactFolder.h: removed + "nameInContainer" from the list of required methods. + + * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject + -davContentType]): returns "text/calendar". + + * SoObjects/Contacts/SOGoContactLDAPFolder.m + ([SOGoContactLDAPFolder -davResourceType]): declare the correct + groupdav resource-type. + + * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders + -davContentType]): same as below. + + * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder + -initWithName:newNameinContainer:newContainer]): new overriden + method setting the custom owner directly. + + * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts + -davContentType]): same as below. + + * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount + -davContentType]): same as below. + + * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]): + declare "httpd/unix-directory". + + * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare + "UTC" as fallback timezone instead of "Canada/Eastern". + ([-hasEmail:email]): make use of the new NSArray's + containsCaseInsensitiveString: method. + + * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject + -davContentType]): declare "message/rfc822" as content type. + + * SoObjects/Appointments/SOGoAppointmentFolder.m + ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an + ivar in SOGoObject. + ([SOGoAppointmentFolder + -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above. + ([-fetchContentObjectNames]): commented out method since it was + usefull only for testing Funambol. + + * SoObjects/SOGo/NSArray+Utilities.m ([NSArray + -containsCaseInsensitiveString:match]): an enhanced version of + containsObject:. + + * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed + useless method. + ([-showMarkDeletedButton]): removed useless method. + ([-showTrashButton]): removed useless method. + + * SoObjects/Appointments/iCalEntityObject+SOGo.m + ([iCalEntityObject -userIsParticipant:user]): new proxy method + that invoked isParticipant on self for each possible email + addresses of the user passed as parameter. + ([iCalEntityObject -userIsOrganizer:user]): same as above. + + * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class + extension module. + + * SoObjects/Appointments/SOGoAppointmentObject.m + ([SOGoAppointmentObject + -saveContentString:contentStringbaseVersion:baseVersion]): remove + method since an event may not have an organizer. + + * SoObjects/SOGo/SOGoObject.m ([SOGoObject + -GETAction:localContext]): clarified method. Added support for + content-type (thanks to Helge Hess). + ([SOGoObject -initWithName:_nameinContainer:_container]): + initialize and retain the owner. + ([SOGoObject -davContentType]): returns "text/plain". + +2007-05-30 Wolfgang Sourdeau + + * UI/Common/UIxObjectActions.m ([UIxObjectActions + -addUserInAclsAction]): send an acl addition mail. + ([UIxObjectActions -removeUserFromAclsAction]): send an acl + removal mail. + + * UI/Common/UIxFolderActions.m ([UIxFolderActions + -_realActionWithFolderName:folderDict]): handle the possible + presence of the "mail-invitation" url parameter. If present, the + user will be redirected to the relevant folder. + + * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method. + ([SOGoUser -language]): new method that returns the user's + preferred language, or the system's if none has been set yet. + + * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method + that returns the full dav url to self. + ([SOGoObject -soURL]): same as above but for the so url (Web UI). + ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that + returns the full so url to the base of the SOGo module to which + self belongs, and for the specified user. + ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above + but for the current user. + ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method + required by the acl advisory templates and which returns a link + the target user can click to activate its new subscription. + ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above + but for inclusion of the application/x-sogo-notification part, + which will be handled by the Lightning enhancer plugin. + + * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction]) + ([UIxMailFolderActions -unsubscribeAction]): new stub methods that + do nothing yet since imap folder subscription is not handled yet. + + * SoObjects/SOGo/SOGoContentObject.m + ([-hasSupportForDefaultRoles]): removed method. + + * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager + -getFullEmailForUID:uid]): new method that returns the username + + email pair. + + * SoObjects/Appointments/SOGoCalendarComponent.m + ([SOGoCalendarComponent +initialize]): the default language for + mail templates is now set to English. + + * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of + SOGoACLAdvisory implementing the french template for user removal + from acls. + + * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of + SOGoACLAdvisory implementing the french template for user + additions to acls. + + * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of + SOGoACLAdvisory implementing the english template for user removal + from acls. + + * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of + SOGoACLAdvisory implementing the english template for user + additions to acls. + + * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the + supercall of all the acl advistory templates. The model is based + on SOGoAptMailNotification except that the template encapsulates + the message to be sent. Later, we might create a superclass common + to all template-based emails. + + * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray + -addRange:newRange]): new method that store a string + representation of the NSRange passed as parameter. + ([NSMutableArray -hasRangeIntersection:testRange]): tests whether + any range contained in self intersect with the one passed as parameter. + + * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]): + store ranges in an array to prevent them from intersecting with + each other during the passes. + +2007-05-29 Wolfgang Sourdeau + + * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder + -primaryFetchMailboxInfo]): useless method. Removed. + +2007-05-28 Wolfgang Sourdeau + + * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder + -toManyRelationshipKeys]): invoke [self subfolders]. + ([SOGoMailFolder -subfolders]): new method containing what used to + be in toManyRelationshipKeys. + ([SOGoMailFolder -subfoldersURL]): same as above but returns imap + urls. + + * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount + -allFolderPaths]): renamed version of "allFolderPathes", sorted by + named and at the beginning of which we put the predefined folders. + + * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions + -emptyTrashAction]): new method inspired by a similar one from + UIxMailListView, to which we added the ability to remove + subfolders. + + * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed + method. Replaced with a similar one in UIxMailFolderActions. + + * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions + -renameFolderAction]): implemented method. + ([UIxMailFolderActions -deleteFolderAction]): no longer delete the + specified folder. Instead, we put it in the trash folder. + + * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed + method, replaced with a similar method in the new + UIxMailFolderAction class module. + ([-deleteFolderAction]): idem. + + * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions + -createFolderAction]): new method implementing subfolder creation. + ([UIxMailFolderActions -renameFolderAction]): new method + implementing subfolder renaming (basic implementation to be + finalized later). + ([UIxMailFolderActions -deleteFolderAction]): new method + implementing folder deletion. + + * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing + web actions related to the handling of imap folder. + +2007-05-25 Wolfgang Sourdeau + + * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder + -ownerInContext:localContext]): overriden method because we are an + IMAP4 client and we need a bit more intelligence to deduce the + owner of the current folder. + ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might + return an NSException so we need to be careful here to avoid a + crash. + ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an + NSException so we need to be careful here to avoid a crash. + + * SoObjects/Mailer/SOGoMailAccounts.m + ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag]) + there is no longer any concept of Intranet or Internet connection + handling. + + * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount + -sharedFolderName]): new method. + ([SOGoMailAccount -otherUsersFolderName]): new method. + + * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by + new javascript code and the new UIxMailAccountActions class. + + * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new + javascript code and the new UIxMailAccountActions class. + + * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by + new javascript code and the new UIxMailAccountActions class. + + * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions + -listMailboxesAction]): new method that returns a json-formatted + tree of all the mailboxes available to the current user. + + * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing + web actions related to the handling of mail accounts. + + * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension + module. + + * SoObjects/SOGo/NSObject+Utilities.m ([NSObject + -jsonRepresentation]): new interface method meant to be overriden + by the primitive classes. + +2007-05-23 Wolfgang Sourdeau + + * UI/MailerUI/UIxMailSplashView.m: removed. + + * SoObjects/Appointments/SOGoCalendarComponent.m + ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add + the uid to the list only when the user email is recognized by the + user manager. + +2007-05-22 Wolfgang Sourdeau + + * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject + -isDeletionAllowed]): completed method with the new imap acl api. + + * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]): + removed method. + + * SoObjects/SOGo/SOGoPermissions.m: added the new role + "SOGoMailRole_MessageEraser". + + * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID]) + ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's + "defaultUserID" method into account. + + * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser]) + ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's + "defaultUserID" method into account. + + * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing + methods to support the IMAP acls mentionned in the RFC 4314, + removed the ones specific to Cyrus. + + * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new + mandatory method for subclasses. Removed the SOGoDefaultUserID + global var. + + * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]): + overriden method to return @"". + + * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject + -defaultUserID]): overriden method to return @"". + + * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder + -aclsForUser:uid]): overriden method. + ([SOGoMailFolder -removeAclsForUsers:users]): overriden method. + ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method. + ([SOGoMailFolder -defaultUserID]): overriden method. + ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method. + +2007-05-18 Wolfgang Sourdeau + + * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder + -aclUsersForObjectAtPath:objectPathArray]): new method that being + forwarded the calles to aclUsers for the GCS-based subclasses of + SOGoObject. + + * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous + methods that would have been used to support IMAP acls. Replaced + them with the new protocol for them that has been implemented in + SOGo during the last few weeks. + + * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject + -hasSupportForDefaultRoles]): override method by returning "YES". + + * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray + -addObjectUniquely:object]): new method with an explicit name. + + * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed + "acl" to "aclUsers". Now designed to return only the uid of the + users involved in an ACL. + ([SOGoObject -hasSupportForDefaultRoles]): new method returning + "NO" by default. To indicate to the acl editor that we don't want + to handle a default user. + + * SoObjects/SOGo/SOGoPermissions.[hm]: added the + SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_* + symbols. + + * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that + provides a view to the IMAP acls. + + * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module. + + * UI/WebServerResources/MailerUI.js: replaced all invocations of + addEventListener to the use of prototype's Event object. Also, + configured all menus programmatically following descriptions lists + containing their callbacks, or nulls, submenus id or separators. + +2007-05-17 Wolfgang Sourdeau + + * UI/Common/UIxObjectActions.m ([UIxObjectActions + -addUserInAclsAction]): save the previous roles of the user + (unlikely) or the default roles, or None instead of saving the + roles that should appear the first time in the role editor when no + default has been set... + + * SoObjects/SOGo/SOGoObject.m: defined a new constant + "SOGoDefaultUserID". + + * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder + -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): + ignore the "AuthorizedSubscriber" role and add the "None" role + when no other role is found. + + * UI/Common/UIxAclEditor.m: added a button for the new default + user roles feature. + + * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor + -_initRights]): don't take the "None" role into account when + initializing the list of current roles. + + * SoObjects/SOGo/SOGoPermissions.m: added a new void role + "SOGoRole_None". + +2007-05-16 Wolfgang Sourdeau + + * SoObjects/SOGo/NSString+Utilities.m ([NSString + -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=". + There is no need to subscract the start from the length if a space + is not found since the range has not changed either. Finally, the + first character before the url might also be a tab or a cr, so we + match it against the "urlAfterEndingChars" custom NSCharacterSet. + ([NSString -stringByDetectingURLs]): modified to handle email + addresses and add a correct "mailto:" link. + +2007-05-15 Wolfgang Sourdeau + + * SoObjects/Appointments/SOGoAppointmentFolder.m + ([SOGoAppointmentFolder -fetchContentObjectNames]): override + method to return the events in the range of 2 weeks ago up to 4 + weeks from "now". + + * UI/MailPartViewers/UIxMailPartTextViewer.m + ([UIxMailPartTextViewer -flatContentAsString]): use the new + "stringByDetectingURLs" method to offer clickable urls. + + * SoObjects/SOGo/NSString+Utilities.m ([NSString + -stringByDetectingURLs]): this new method replaces passive URLS + with active ones for HTML resolution of the text. + +2007-05-14 Wolfgang Sourdeau + + * SoObjects/Mailer/SOGoDraftObject.m ([NSString + -asQPSubjectString:encoding]): simplified method. + The headers indicates "utf-8" again thank to our fix in + sope-mime. + + * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is + being used. + +2007-05-11 Wolfgang Sourdeau + + * UI/Common/UIxObjectActions.m ([UIxObjectActions + -removeUserFromAclsAction]): implemented this method which was + missing and is required to remove users from ACLs. + + * UI/Common/UIxFolderActions.m ([UIxFolderActions + -subscribeAction]): folderDict was not autoreleased, resulting in + a leak... + + * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults + -primaryFetchProfile]): when building with libFoundation, don't + use the "propertyList" method from NSString. Rather, we convert + the string to an NSData instance and passit as parameter to + NSDeserializer. This way, we obtain a mutable dictionary rather + than an immutable one. + + * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText]) + ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the + constant string "contentTypeValue". + contentTypeValue is now set back to iso-8859-1 since NGMime + converts extracts the data in that encoding. + +2007-05-10 Wolfgang Sourdeau + + * SoObjects/SOGo/LDAPSource.m ([LDAPSource + -checkLogin:loginToCheckandPassword:passwordToCheck]): if a + "bindFields" value is present in the user defaults, use the + specified fields to find the dn of the user to bind. + ([LDAPSource -allEntryIDs]) + ([LDAPSource -fetchContactsMatching:match]) + ([LDAPSource -lookupContactEntry:entryID]) + ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): + bind and unbind the connection on each request. + + * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module. + + * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView + -contactSearchAction]): simplified method to use the facilities + provided by the LDAPUserManager. No longer takes care of the + "ldap-only" url parameter since all requests are handled by the + usermanager now. + + * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults + -primaryFetchProfile]): check that the value returned is not null + before interpreting it. + + * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager + -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty. + ([LDAPUserManager -_fillContactMailRecords:contact]): if the + system email is already present, remove it before adding it. + + * SoObjects/SOGo/LDAPSource.m ([LDAPSource + -checkLogin:loginToCheckandPassword:passwordToCheck]): check that + loginToCheck is not empty. + ([LDAPSource -fetchContactsMatching:match]): check that match is + not empty. + ([LDAPSource -lookupContactEntry:entryID]): check that entryID is + not empty. + ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that + uid is not empty. + +2007-05-09 Wolfgang Sourdeau + + * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name + for "mail" method. + ([SOGoUser -systemEmail]): returns the email formed from the + username and the default mail domain. + ([SOGoUser -hasEmail:email]): test whether the user has the + specified email, in a case-insensitive way. + + * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator + -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to + check login information. + + * SoObjects/Contacts/SOGoContactLDAPFolder.m + ([SOGoContactLDAPFolder + +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]): + no longer manage LDAP connections. The requests are forwarded to + the relevant LDAPSource instead. + + * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders + -appendSystemSources]): pass LDAPSource objects to + SOGoContactLDAPFolder instances. + + * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email + address of the "from" field before sending the message. Otherwise, + sending the mail won't work. + + * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]): + rewrote this method to request all the available email identities + for the current user. Also, the from field also contains the full + name of the user, not just his/her email address. + + * SoObjects/Appointments/SOGoCalendarComponent.m + ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken + from the previous module iCalEntityObject+Agenor. + ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem. + ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): + idem. + + * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module + replacing the SOGoContactLDAPEntry module. It was renamed as such + because it now receives a dictionary instead of an NGLdapEntry. + It thus can now handle data from any source of LDIF data, not + only coming from LDAP. + + * SoObjects/SOGo/LDAPUserManager.[hm]: new class module + implementing most of what used to be the AgenorUserManager class. + The difference is that users are cached in the forme of + dictionaries and many sources are used. Also, it can be used to + search LDAP contacts. + + * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing + the concept of "ldap source", to be used by all the classes + needing access to LDAP-provided information: addressbooks and the + user manager. Most the method thereing are transcriptions of + methods previously found in SOGoContactLDAPFolder. It also contain + utility methods for user matching and authentification. + + * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed + module, rendered useless by code refactoring. + + * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced + with the freshly written "LDAPUserManager". + +2007-05-08 Wolfgang Sourdeau + + * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to + SOGOContactLDIFEntry. + + * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class + module, obsoleted by code in SOGo/LDAPSource.[hm]. + +2007-05-04 Wolfgang Sourdeau + + * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]): + new method with an explicit name. + +2007-05-03 Wolfgang Sourdeau + + * SoObjects/Appointments/SOGoCalendarComponent.m + ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method + replacing "isOrganizer:orOwner:" by taking only one instance of + SOGoUser as parameter. + ([SOGoCalendarComponent -participant:user]): new method replacing + the previous "isParticipant" boolean method by returning the first + participant matching the user passed as parameter. This method is + used so that both the regular email address and the "system email + address" of the user are matched against the participants emails. + + * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager + -getSystemEMailForUID:uid]): new method that returns the email + formed with the user's uid and the default mail domain. + + * SoObjects/Appointments/SOGoCalendarComponent.m + ([SOGoCalendarComponent -rolesOfUser:login]): removed method that + was previously commented out. + + * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method + forwared to [AgenorUserManager getSystemEmailForUID:]. + + * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor + -toolbar]): method replacing the one with the same name in the + task and appointment editor classes. This method makes also use of + the new method "isOrganizerOrOwner:" and "participant:" in + SOGoCalendarComponent. + + * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor + -toolbar]): removed method, replaced with a method with the same + name in UIxComponentEditor. + + * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed + method, replaced with a method with the same name in + UIxComponentEditor. + + * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults + -primaryFetchProfile]): the values returned from the database are + converted to a put dictionary first, since the dictionary returned + is actually an immutable one, which can cause a crash afterwards. + +2007-04-27 Wolfgang Sourdeau + + * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer" + and "SOGoRole_ObjectEditor". + + * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor + -prepareRightsForm]): this method is no longer mandatory. + + * UI/Contacts/UIxContactsUserRightsEditor.m + ([UIxContactsUserRightsEditor + -setUserCanCreateObjects:userCanCreateObjects]): new subclass + module to handle acls related to the address books. Partial + implementation. + + * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder + -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache + newly set roles. + ([SOGoFolder + -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove + specified roles from cache. + ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]): + put resulting roles in cache. + + * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke + initWithName:inContainer:. Instead, directly initialize the ivars + as it is supposed to be to avoid an infinite loop whenever one of + those two methods are overriden. + + * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]): + removed method. + + * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry + -aclsForUser:uid]): override method so that SOGo won't crash when + loading the contact card. + +2007-04-26 Wolfgang Sourdeau + + * SoObjects/Appointments/SOGoAppointmentFolder.m + ([SOGoAppointmentFolder -_privacySqlString]): the string for the + "freebusy" special user should only require opaque elements. + +2007-04-25 Wolfgang Sourdeau + + * SoObjects/Appointments/SOGoAppointmentFolder.m + ([SOGoAppointmentFolder -davResourceType]): fixed a problem with + our double declaration where the resulting XML would be screwed. + There is only one collection per namespace. + + * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate + rfc822DateString]): new method that returns a string conform to + rfc 822 and suitable for email headers. + + * SoObjects/Mailer/SOGoDraftObject.m: invoke the new + "rfc822DateString" category method on the date we put in the + header. + +2007-04-24 Wolfgang Sourdeau + + * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction]) + ([UIxUserRightsEditor -saveUserRightsAction]): new action methods + which should never be overriden. + ([UIxUserRightsEditor -appendRight:newRight]) + ([UIxUserRightsEditor -removeRight:right]) + ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list]) + ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility + methods that can be used by the subclasses. + ([UIxUserRightsEditor -prepareRightsForm]): new method that should + mandatorily be overriden to prepare the elements of the subclassed + form. + ([UIxUserRightsEditor -updateRights]): new method that should + mandatorily be overriden to update the user rights from the + elements of the subclassed form. + + * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we + check if the uid is already listed before adding it to our array. + This is because the acl table can contain more than one record per + user/object relationship. + + * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder + -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the + "roles" parameter is now an NSArray instead of a string. Therefore + we loop throughout the array to populate the table. All the + relevant records are removed prior to the addition of the new + rights. + + * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject + -aclsForUser:uid]): new override that returns nil until we add + support for IMAP acls. + + * SoObjects/Mailer/SOGoMailAccounts.m + ([SOGoMailAccounts -aclsForUser:uid]): same as below. + + * SoObjects/Contacts/SOGoContactLDAPFolder.m + ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below. + + * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders + -aclsForUser:uid]): override this method which will always return + nil. + + * SoObjects/SOGo/SOGoPermissions.[hm]: added + [Public,Private,Confidential] + x[Viewer,DAndTViewer,Responder,Modifier]. Renamed + SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for + ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate. + + * SoObjects/Appointments/SOGoAppointmentFolder.m + ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method + that defines default roles for new elements in the acl. + + * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class + module and subclass of UIxUserRightsEditor specific to the + handling of user rights on calendar folders. + +2007-04-23 Wolfgang Sourdeau + + * SoObjects/Appointments/SOGoAppointmentFolder.m + ([SOGoAppointmentFolder -groupDavResourceType]): return both + "vevent-collection" and "vtodo-collection". + + * UI/Common/UIxUserRightsEditor.[hm]: new template class module + that implements the detailed editor of user rights per-object. + +2007-04-17 Wolfgang Sourdeau + + * SoObjects/SOGo/SOGoUser.m ([SOGoUser + -rolesForObject:objectinContext:context]): no longer query objects + for "roleForUser:". Instead, all objects should implement + "rolesForUser:". + + * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]): + new method to comply with the new acl "protocol" in SOGoObject. + Uses SOGoFolder's new facilities for ACLS. + ([SOGoContentObject -aclsForUser:uid]): idem. + ([SOGoContentObject -setRoles:rolesforUser:uid]): idem. + ([SOGoContentObject -removeAclsForUsers:users]): idem. + + * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder + -aclsForObjectAtPath:objectPathArray]): new method generic to GCS + based folders. This method is derived from the code that was in + UIxAclFolder before its removal. + ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]): + idem. + ([SOGoFolder + -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem. + ([SOGoFolder + -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem. + ([SOGoFolder -setRoleForUsers:uidsto:role]) + ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method. + + * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method + that requires overriding by subclasses. + ([SOGoObject -aclsForUser:uid]): idem. + ([SOGoObject -defaultAclRoles]): idem. + ([SOGoObject -setRoles:rolesforUser:uid]): idem. + ([SOGoObject -removeAclsForUsers:users]): idem. + + * UI/Common/UIxObjectActions.m: new module implementing the web + actions common to SOGoObject and all its subclasses. + ([UIxObjectActions -addUserInAclsAction]): new method that adds a + user with the clientObject defaults user rights to the object's + acl. + + * UI/Common/UIxAclEditor.m: modified module so as to simplify it + to the point where it will only list the users (and their name) + associated with an object acl. + + * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its + methods have been moved into SOGoObject and SOGoFolder during a + refactoring. + + * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor + -iCalParticipantsAndResourcesStringFromQueryParameters]): removed + method made useless by the programmatic handling of iCalendar + objects. + ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem. + ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem. + ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem. + + * UI/WebServerResources/MailerUI.js (initDnd): enable drag and + drop on all folder nodes, not just on leaves. + + * SoObjects/Contacts/SOGoContactLDAPFolder.m + ([SOGoContactLDAPFolder + -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search. + +2007-04-16 Wolfgang Sourdeau + + * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some + debugging facilities when the SOGoDebugObjectAllocation user + default is set. + +2007-04-11 Wolfgang Sourdeau + + * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new + method that SOGo will need with non-gnustep Foundation + implementation. + ([NSString -stringByAppendingPathComponent:component]): new method + that SOGo will need when building with libFoundation. Method + removed later since it is available from + Foundation/NSPathUtilities.h. + + * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved + from SOGoObject.m. + + * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits + every subclass to access [WOApplication context] without having to + invoke it more than once. + + * SoObjects/Appointments/SOGoCalendarComponent.m + ([SOGoCalendarComponent -changeParticipationStatus:_status]): + moved method from SOGoTaskObject and SOGoAppointmentObject up to + their parent class. + + * UI/Scheduler/UIxCalSelectTab.m: removed module. + +2007-04-10 Wolfgang Sourdeau + + * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry + -vCard]): test the prefix of the card in a case-independent way. + + * OGoContentStore/OCSContactFieldExtractor.m + ([OCSContactFieldExtractor + -extractQuickFieldsFromContent:content]): we no longer accept + records in a format other than versit vCard so we can get rid of a + lot of code. + +2007-04-04 Wolfgang Sourdeau + + * UI/Contacts/UIxContactsListView.m ([UIxContactsListView + -selectorComponentClass]): restored method. + +2007-04-03 Wolfgang Sourdeau + + * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView + -shouldDisplayCurrentTask]): the current task is not displayed if + it is NOT completed or if the "showCompletedTasks" flag is set. + The logic was inverted in Lightning and is now in SOGo too. + +2007-04-02 Wolfgang Sourdeau + + * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we + want the "work" url instead of the "home". + + * UI/Contacts/UIxContactEditor.m ([UIxContactEditor + -_saveSnapshot]): save url values from snapshot. + ([UIxContactEditor -initSnapshot]): load url values from snapshot. + + * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor + -calendarList]): new method replacing "availableCalendars". + + * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector + -calendarFolders]): we now take the list of subscribed calendar + from the container. + + * SoObjects/Appointments/SOGoAppointmentFolder.m + ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new + method derived from and replacing [UIxCalView calendarFolders]. + +2007-03-30 Wolfgang Sourdeau + + * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount + -toManyRelationshipKeys]): don't put the predefined folders in the + list if they are returned by the server. + + * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no + longer store the "flattenedBlocks" in a dictionary since the + object will be deleted anyway and we don't need to put the folders + in cache. + + * UI/MailPartViewers/UIxMailPartHTMLViewer.m + ([UIxMailPartHTMLViewer -_attachmentIds]): take the current + attachment path into account when computing the part urls. + +2007-03-29 Wolfgang Sourdeau + + * UI/Contacts/UIxContactsListViewContainer.m + ([UIxContactsListViewContainer -additionalFolders]): take the list + of subscribed folders from the new property list used for the user + settings. The value of its key is SubscribedFolders for the + dictionary entry named "Contacts". + + * UI/Contacts/UIxContactsListView.m ([UIxContactsListView + -canAccessContentAction]): new method to override the one from + UIxFoldersActions by taking into account the fact that, this time, + the clientObject is an ldap folder. Removed many method that used + to be related to the handling of the user selector. + + * UI/Scheduler/UIxCalDayView.m: commented out many unused methods + to make sure they can be removed. + + * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]): + populate the calendar entries based on the user settings plist. + + * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView + -selectForMailerAction]): restored method. + + * UI/Scheduler/UIxCalendarSelector.m: new template module derived + from a simplified version of the old UIxContactEditor (removed). + + * UI/Contacts/UIxContactsUserFolders.m: new template module for + selecting users or user folders through an LDAP search of which + the results are displayed as a tree. + + * UI/WebServerResources/UIxMailEditor.js: moved previous generic + method "onContactAdd" here since the Mailer is now the only module + to use it when composing emails. + + * UI/WebServerResources/generic.js: added code for handling the + new scheme used for describing SOGo folders, common code to handle + folder addition or removal. + + * UI/Common/UIxFolderActions.m ([UIxFolderActions + -activateFolderAction]): new method that change the "active" + settings in the folder-related fields in the user settings. + ([UIxFolderActions -deactivateFolderAction]): see above. + + * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView + -checkRightsAction]): removed method. + + * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView + -updateAdditionalAddressBooksAction]): removed method. + + * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView + -updateCalendarsAction]): removed method. + +2007-03-28 Wolfgang Sourdeau + + * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView + -checkRightsAction]): removed method. + + * UI/Common/UIxFolderActions.m ([UIxFolderActions + -canAccessContentAction]): new method designed to replace + [UIxCalMainView checkRightsAction] in a more universal way. + +2007-03-27 Wolfgang Sourdeau + + * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders + -roleOfUser:uidinContext:context]): take all the subkeys into + account, not only the "personal" folder. + + * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor + -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field + to the new components. + + * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method + (see below). + + * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager + -getUserDefaultsForUID:uid]): rewrote method to use the "defaults" + field of the sogo_user_profile table, where the user-customizable + changes will be saved. + ([AgenorUserManager -getUserSettingsForUID:uid]): new method + similar to the one above, using the "settings" field where the + automatic settings will be saved. + + * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the + module to bind the userdefaults to a property list contained in a + specified field of the sogo_user_profile table. + ([AgenorUserDefaults + -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]): + added a "fieldName" parameter. + + * UI/Common/UIxFolderActions.m: new module implementing web + actions common to all GCS-based folders. + +2007-03-26 Wolfgang Sourdeau + + * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]): + put a carriage return after the day name. + + * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage + -readFreeBusyAction]): restored method. + +2007-03-22 Wolfgang Sourdeau + + * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage + -defaultAction]): remade module to redirect automatically to the + Calendar url. + + * SoObjects/Contacts/NSDictionary+Contact.m: removed module. + +2007-03-21 Wolfgang Sourdeau + + * UI/Contacts/UIxContactsListView.m ([UIxContactsListView + -deleteAction]): new web method to delete personal addressbook + folders. + + * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder + -delete]): override method to refuse the deletion of the folder if + its nameInContainer is "personal". + + * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method + that forwards the deletion request to the folder manager. + +2007-03-19 Wolfgang Sourdeau + + * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor + -zoomList]): new method that returns the list of available zoom factors. + + * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor + -changeStatusAction]): rewrote method. + + * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor + -_handleAttendeesEdition]): make sure "attendeesNames" has a + length > 0 before computing the attendees. Otherwise there will be + an invalid empty entry. + ([UIxComponentEditor -_handleOrganizer]): new method that adds the + organizer when there are attendees and remove it when the + attendees are removed. + +2007-03-18 Wolfgang Sourdeau + + * UI/Scheduler/UIxAttendeesEditor.m): new component. + + * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for + the task and appointment editors. Now a container component + handling the common elements of tasks and events. + + * UI/Scheduler/UIxTaskEditor.m: same as below. + + * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer + a subclass of UIxComponentEditor but a subcomponent of it. + + * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the + toolbar can have the special value "none" to indicate there is + none attached to the window. + + * SoObjects/Appointments/SOGoCalendarComponent.m + ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new + method. + ([SOGoCalendarComponent -isParticipant:email]): new method. + ([SOGoCalendarComponent -calendar:create]): takes one parameter + "create" which is a boolean indicating whether we want to create + the calendar if it does not exist. + +2007-03-12 Wolfgang Sourdeau + + * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead + of a table, the same way the dayly and weekly views have been for + a few months now. + +2007-02-09 Helge Hess + + * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV + resourcetype + + * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV + property to point at the user folder + +2007-03-07 Wolfgang Sourdeau + + * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator + -userInContext:]): returns "SOGoUser". + + * SoObjects/Appointments/SOGoCalendarComponent.m + ([SOGoCalendarComponent -contentAsString]): overriden method that + takes the privacy into account and discard the relevant fields if + needed by generating a new content string and caching it. + ([SOGoCalendarComponent + -saveContentString:contentStringbaseVersion:baseVersion]): if the + new method above has cached a content string, release it and set + it to nil so that it will have to be regenerated in the case it is + requested further. + ([SOGoCalendarComponent -_filterPrivateComponent:component]): + discard the fields that have to be hidden when the card is + private. + + * SoObjects/Appointments/SOGoAppointmentFolder.m + ([SOGoAppointmentFolder + -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make + sure the cards are now handled as instances of + SOGoCalendarComponent instead of SOGoContentObject so that their + content string is taking the privacy classifiction into account. + ([SOGoAppointmentFolder -_privacySqlString]): new method that + generates a query to determine what information can be given and + if the card itself has to be shown. + + * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent + -getICalPersonsFromValue:selectorValue]): removed useless + "isAccessRestricted" method. + + * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView + -setStyle:_style]): test whether the values of orgmail and + partmails are null before manipulating them, otherwise SOGo sends + a "rangeOfString:" message to an NSNull, which makes it crashes. + + * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor + -extractQuickFieldsFromEvent:_event]): we now use the new + "symbolicAccessClass" method from iCalEntity to determine the + value of the "classifiction" field. + ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same + as above. + +2007-03-05 Wolfgang Sourdeau + + * SoObjects/Appointments/SOGoAppointmentFolder.m + ([SOGoAppointmentFolder + -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]): + see below, the query is adapted consequently. + + * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor + -extractQuickFieldsFromTodo:_task]): the field "ispublic" was + renamed to "classification" and can any integer as value. + ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]): + idem. + +2007-02-26 Wolfgang Sourdeau + + * UI/MailPartViewers/UIxMailPartHTMLViewer.m + ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]): + don't prepend anything to the class and id named. Instead, we + make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter" + class. + 2007-02-21 Wolfgang Sourdeau * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject @@ -1274,7 +4056,7 @@ 2006-09-13 Wolfgang Sourdeau * 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.