1 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
4 -deleteFolderAction]): no longer prefix the target folder with
7 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
8 -listMailboxesAction]): base the folder type on the folder
11 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
12 -lookupName:_keyinContext:acquire:_acquire]): compare the full
13 traversal to the potential looked up folder with the special
14 folder names and return an object with the appropriate
15 SOGoMailFolder subclass.
17 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
18 -traversalFromMailAccount]): don't prepend the whole string with
21 * SoObjects/Mailer/SOGoMailAccount.m
22 ([-lookupSentFolder:_keyinContext:_ctx])
23 ([-lookupDraftsFolder:_keyinContext:_ctx])
24 ([-lookupTrashFolder:_keyinContext:_ctx])
25 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
26 ([SOGoMailAccount -inboxFolderNameInContext:])
27 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
28 ([SOGoMailAccount -sentFolderNameInContext:])
29 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
30 the resulting name with "prefix" since we might return a nested
32 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
33 names with "/". Sorts the resulting folder list with
34 localizedCaseInsensitiveCompare: instead of
35 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
36 that were removed, instead, we choose the appropriate class
37 depending on the folder name. And since we are in SOGoMailAccount,
38 we don't have to compute a traversal path to match the key with
41 -folderWithTraversal:traversalandClassName:className]): new method
42 that returns an instance of the specified SOGoMailFolder subclass,
43 based on the traversal path passed as parameter.
44 ([SOGoMailAccount -inboxFolderInContext:_ctx])
45 ([SOGoMailAccount -draftsFolderInContext:_ctx])
46 ([-sentFolderInContext:_ctx])
47 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
48 -folderWithTraversal:andClassName: method described above.
50 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
51 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
52 propertyListFromData:mutabilityOption:format:errorDescription:] to
53 deserialize the plist. Removed variant for libFoundation since it
54 should support the above.
55 ([AgenorUserDefaults -generateSQLForInsert])
56 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
57 -[NSPropertyListSerialization
58 dataFromPropertyList:format:errorDescription:] to serialize the
59 plist. Removed variant for libFoundation since it should support
60 the above. Escape the backslashes from the resulting string.
62 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
64 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
65 SOGoMailFolder: SOGoMailSpecialFolder.
67 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
68 -traversalFromMailAccount]): overridden method that returns the
69 initialized mutable string.
70 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
71 with -traversalFromMailAccount and reposition them at the
72 beginning of the list. By creating the special folders during that
73 request, we also make sure that the folder exists thanks to the
74 new initialisation method of the new "SOGoSpecialMailFolder"
76 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
78 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
80 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
81 longer use lookupImap4Folder.
82 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
85 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
86 -traversalFromMailAccount]): new method that returns the full
87 IMAP4 path to the object.
89 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
90 "superUsernames" after fetching it from the ud.
92 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
94 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
95 -eventsListAction]): substitude the start and end date with their
96 UTC counterpart, taking into account the offset from UTC related
97 to those dates instead of the current one. This renders
98 -[UIxCalMainView -userUTCOffset] obsolete because the computings
99 that occured in javascript are now done server-side.
101 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
102 removed obsolete method.
104 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
105 method converting html content to plain text.
107 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
108 enhancing NSString with utility methods pertaining to mail handling.
110 * SoObjects/Mailer/SOGoMailObject.m
111 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
113 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
114 modified method to be always recursive and to take an array of the
115 accepted mime-types as parameter. The returned array now contains
116 the mime-type as well as the part keys.
118 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
119 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
120 ([SOGoMailObject -contentForEditing]): rewrote method to take into
121 account the first text/plain part or the first text/html part
122 converted to text/plain with our new -[NSString htmlToText]
125 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
126 "replyToAll:" with YES as parameter instead of NO.
128 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
130 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
131 -davContentType]): ignore any possible parameter taken from the
132 mime-info of the body part.
134 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
135 -lastFirstMessageNumber]): new accessor that returns the first
136 message number of the last series of messages.
137 ([UIxMailListView -fetchKeys]): request the bodystructure for each
139 ([UIxMailListView -hasMessageAttachment]): extract the attachment
140 information from the message bodystructure.
142 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
144 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
145 -GETAction:]): use the "application/octet-stream" mime type for
146 elements of type "application/x-xpinstall" to avoid confusing
149 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
150 ([UIxPreferences -itemMessageCheckText])
151 ([UIxPreferences -userMessageCheck])
152 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
153 methods for handling the retrieval of new messages automatically.
155 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
156 that returns the interval of time between automatic message
159 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
160 -defaultAction]): now expunges the last folder marked for expunge.
162 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
163 -trashInContext:_ctx]): now marks the container folder for
166 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
167 -markForExpunge]): new method that marks the folder for the next
168 automatic expunge operation in the user settings.
169 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
170 takes the last folder marked for expunge, expunges it and removes
171 it from the user settings, if it exists.
173 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
175 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
176 -messageSubjectCellStyleClass]): added support for replied,
177 forwarded, forwarded and replied mails.
179 * SoObjects/Mailer/NSData+Mail.m ([NSData
180 -bodyDataFromEncoding:encoding]): new utility method that decodes
181 the NSData instance properly depending on the encoding string
184 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
185 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
187 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
188 -stringForData:_datapartInfo:_info]): simplified by invoking
189 -bodyDataFromEncoding: from our new NSData category methods.
191 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
192 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
193 where only the body part of the first of the keys fetched was
194 returned. Also decodes the body parts properly following their
197 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
198 extends the NSData class with utility methods useful for handling
201 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
203 * SoObjects/SOGo/NSArray+Utilities.m
204 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
207 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
208 -keysWithFormat:keyFormat]): replace instances of NSNull with
211 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
212 empty, use "c_cn" instead.
214 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
215 ([SOGoMailAccount -draftsFolderInContext:_ctx])
216 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
217 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
218 no always be specified from the root instead of sometimes from the
221 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
223 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
224 ([UIxPageFrame -productLocalizableStrings]): invoke the new
225 +[SOGoUser language] method if the user is nil.
227 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
228 that returns any generically-found language.
229 ([SoUser -language]): modified to call the above.
230 ([SOGoUser -language]): modified to call the above if the user
231 language has a null length.
233 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
234 -davEntityTag]): modified to return the "hash" of the vCard string.
236 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
237 -removeAllLabelsAction]): new method that removes all label flags
238 from the associated message.
239 ([UIxMailActions -addLabel1Action]
240 [UIxMailActions -addLabel2Action]
241 [UIxMailActions -addLabel3Action
242 [UIxMailActions -addLabel4Action]
243 [UIxMailActions -addLabel5Action]): new methods that adds label
244 flags to the associated message.
245 ([UIxMailActions -removeLabel1Action]
246 [UIxMailActions -removeLabel2Action]
247 [UIxMailActions -removeLabel3Action
248 [UIxMailActions -removeLabel4Action]
249 [UIxMailActions -removeLabel5Action]): new methods that removes
250 label flags from the associated message.
252 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
253 new accessor that returns the labels associated with the message.
255 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
256 -allFolderPaths]): new method that returns all the paths of all
257 the subfolders of the folder object.
258 ([SOGoMailFolder -allFolderURLs]): new method replacing
261 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
262 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
263 role from its parent folder.
265 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
267 * SoObjects/SOGo/SOGoUser.m
268 ([SOGoUser -rolesForObject:objectinContext:context]): allow
269 multiple super usernames to be defined. The user default
270 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
273 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
275 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
276 -userInContext:]): override the super method by returning
277 anonymous if the super returns nil.
279 * UI/Common/UIxPageFrame.m ([UIxPageFrame
280 -productLocalizableStrings]): new method that returns the
281 product-specific translation dictionary as a JSON hash.
282 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
283 the "Common" framework.
284 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
285 the requestor components to require additional Javascript files.
286 This is useful now that all the scripts are loaded at the end of
288 ([UIxPageFrame -additionalJSFiles]): new getter related to the
291 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
293 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
294 implemented new web method.
296 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
297 -copyToFolderNamed:folderNameinContext:]): new method with the
298 code cut/pasted from -moveToFolderNamed:inContext:.
299 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
300 modified to use the code from -copyToFolderNamed:inContext:, which
301 is common between the two actions.
303 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
304 ([SOGoMailAccount -sentFolderNameInContext:])
305 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
306 the user settings into account.
308 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
309 ([UIxMailFolderActions -setAsSentFolderAction])
310 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
311 that change the purpose of the active folder to "Sent", "Drafts"
314 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
315 returns the subject as quoted-printable.
317 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
318 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
319 the "aclMethod" method for the subsequent language-dependent
322 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
323 returns the subject as quoted-printable.
325 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
326 -dealloc]): release item, aptStartDate and aptEndDate.
328 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
330 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
331 -initWithName:newNameinContainer:newContainer]): the owner of a
332 shared folder is set to "nobody" by default.
334 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
335 that returns whether the object has an owner or not.
337 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
339 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
340 the folder even if the current user is not its owner.
342 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
344 * We now send advisory emails when folders
345 are created / deleted.
347 * Fixed the sending of advisory emails upon
348 ACL changes on folders.
350 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
352 * UI/Scheduler/UIxComponentEditor.m
353 Implemented event/task priority support.
355 * SoObjects/Contacts/SOGoContactGCSFolder.m
356 Added CardDAV support.
358 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
359 Implemented From: based on LDAP results based on
360 the MailFieldNames attribute (an array) specified
361 in every LDAP-based authentication sources.
363 * UI/MailPartViewers/UIxMailPartTextViewer.m and
364 UI/WebServerResources/MailerUI.css
365 We avoid replacing "\r\n" and "\n" with <br /> and
366 rather use CSS capabilities for proper formatting.
367 This is _WAY_ faster on very large mails.
369 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
371 * UI/Scheduler/UIxComponentEditor.m
372 ([UIxComponentEditor -componentCalendar]): returns the calendar
373 object of the current event.
375 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
377 * UI/WebServerResources/MailerUI.js
378 We check if at least one message is selected
379 before performing a Reply/Reply All/Forward
381 * SoObjects/Appointments/SOGoAppointmentFolder.m
382 and others - implemented support for recurring
383 events (with some known limitations right now,
384 all soon to be fixed).
386 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
388 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
389 the constraint that a username can't start with a digit.
391 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
393 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
394 repository to Inverse's branch.
396 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
398 * SoObjects/Mailer/SOGoDraftObject.m
399 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
400 constraint on space in file name.
401 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
402 now removes from file name all characters preceding a backslash.
403 This happens with IE7 because the complete attachment file path
406 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
408 * SoObjects/Appointments/SOGoAptMailNotification.m
409 ([SOGoAptMailNotification -appointmentURL]): set personal as the
410 default calendar where to add the event.
412 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
413 activate the SOGoUIxDefaultModule user defaults.
415 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
417 * UI/SOGoUI/UIxComponent.m
418 ([UIxComponent -shortUserNameForDisplay]): returns the string
419 "wrongusernamepassword" when authentication failed.
421 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
423 * UI/MailPartViewers/UIxMailPartICalViewer.m
424 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
425 entry of the Calendars parent folder.
427 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
428 -messageSubject]): new accessor method to work-around a problem
429 within SOPE where a subject could be returned as an NSData.
431 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
432 -appendPersonalSources]): make sure the value of the "c_path4" of
433 the returned rows are not NSNull, otherwise, discard them.
435 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
437 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
438 -compare:otherFolder]): new overriden method that compares two
439 contact foldes based on their class and then transfer the control
440 to the super method in SOGoFolder.
442 * SoObjects/Contacts/SOGoContactLDAPFolder.m
443 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
444 compare two contact folders based on their class and then their
447 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
448 new method for sorting folders. The folders are compared based on
449 their ownership, whether they are a main folder and finally
450 depending on their display name.
452 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
453 -pathArrayToSOGoObject]): do not reorder the paths if the third
454 element is an instance of NSNull.
456 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
457 -subFolders]): returns a sorted array using the "compare:"
460 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
462 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
463 -calendars]): also returns the owner of the listed folders.
465 * SoObjects/Appointments/SOGoAppointmentFolder.m
466 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
468 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
469 method into UIxFolderActions.
471 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
472 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
473 freebusy info from the "personal" calendar.
475 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
476 -createFolderAction]): new standardized method for requesting
477 folder creations among gcs-based modules.
479 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
481 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
482 module, equivalent to the SOGoParentFolder's child
483 SOGoContactFolders, but for calendars.
485 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
486 method that returns translated strings for controller bundles
487 (same as what UIxComponent does for view bundles).
488 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
489 the real path to a subscribed folder (if subscribed).
490 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
491 ([SOGoObject -globallyUniqueObjectId]): new instance method
492 calling its class equivalent.
494 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
496 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
497 whether the user is logged in and if so, redirect to his/her
499 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
502 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
504 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
505 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
507 ([SOGoFolder -displayName]): new method.
508 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
511 * SoObjects/Contacts/SOGoContactLDAPFolder.m
512 ([SOGoContactLDAPFolder
513 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
514 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
516 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
517 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
518 removed method, reimplemented in SOGoFolder.
519 ([SOGoContactGCSFolder -displayName]): removed method,
520 reimplemented in SOGoFolder.
521 ([-delete]): removed method, modified in SOGoFolder.
523 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
524 a subclass of SOGoParentFolder.
526 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
527 from SOGoContactFolders and modified to be more content-independent.
529 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
530 ([UIxMailActions -markMessageReadAction]): new methods moved from
531 UIxMailListView and adapted to invoke the client object directly,
532 since the previous versions had to to a lookup from the parent
535 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
536 method into UIxMailActions.
537 ([-markMessageReadAction]): same as above.
538 ([-viewAction]): removed useless method.
539 ([-javaScriptOK]): removed useless method.
540 ([-isJavaScriptRequest]): removed useless method.
541 ([-lookupActiveMessage]): removed useless method.
543 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
544 -responseWithStatus:status]): new method that returns a WOResponse
545 initialized with the specified status code.
546 ([WODirectAction -responseWith204]): new method that invokes the
547 above one with "204" as parameter.
548 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
549 to make use of -responseWithStatus:.
551 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
552 method that returns a WOResponse initialized with the 204 status
555 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
556 always use a "not deleted" search qualifier along with the user
557 qualifier (if present).
559 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
561 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
562 -contactSearchAction]): only return the records which have an
565 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
566 -trashInContext:_ctx]): no longer expunge the mailbox after
567 marking a message deleted.
568 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
571 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
572 ([-trashAction]): moved method into UIxMailActions.
573 ([-moveAction]): moved method into UIxMailActions.
575 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
577 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
578 ([_UIxHTMLMailContentHandler
579 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
580 comments from the CSS code, do not add the CSS code to the body
581 content and remove references of body from the CSS declarations.
582 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
583 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
584 common with cssContent in a different method and invoke it only
587 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
588 instead of UIxPageFrame.
590 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
592 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
593 ([-appendToResponse:responseinContext:ctx]): commented out.
594 ([SOGoRootPage -connectURL]): new accessor that returns the full
595 url the the "connect" method.
596 ([-connectAction]): rewrote method to return a properly formatted
597 auth. cookie based on the username and password passed as
600 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
601 set the value of the cookie to "discard" and set its expiration
604 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
605 -preprocessCredentialsInContext:context]): consider the user
606 anonymous if the cookie value is "discard".
607 ([SOGoWebAuthenticator
608 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
609 set the expiration date of the cookie to yesterday.
611 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
612 returns the path to the application if the clientObject is not a
615 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
616 moved the requirement of authentication from the SOGo application
619 * SoObjects/Appointments/SOGoAppointmentObject.m
620 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
621 check whether the new appointment object is still relevant before
622 sending a notification.
624 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
626 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
627 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
628 render the login page through the SoDefaultRenderer.
630 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
631 -isPublicInContext:localContext]): new overriden method that
634 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
635 -currentCalendarLogin]): replace css-unsafe characters with _.
637 * UI/SOGoUI/UIxComponent.m ([UIxComponent
638 -shortUserNameForDisplay]): simplified method.
639 ([-user]): removed method since [context activeUser] is as useful.
641 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
643 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
644 set the cookie path to "/".
646 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
647 authenticator based on the request handler key. "dav" returns the
648 SOGoDAVAuthenticator, anything else returns the Web authenticator.
650 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
653 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
654 implementing a subclass of SoCookieAuthenticator, designed for
655 web-based cookie authentication of users.m
657 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
658 new method that resets the authentification cookie.
660 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
662 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
663 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
664 didBind to NO to make sure no false authentication is returned if
665 the bind operation is not executed.
667 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
669 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
670 "In-Reply-To" header field when replying.
672 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
673 table field names that are queried.
675 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
676 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
677 add the "c_" prefix to the quick table field names that are
680 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
682 * SoObjects/Appointments/SOGoAppointmentFolder.m
683 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
684 "personal" to the ocs path of the appointment folder.
686 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
687 -flatContentAsString]): use latin1 when the encoding is not
688 specified, and to reencode data chunk which were not correctly
689 decoded with the original charset.
691 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
692 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
693 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
694 ([SOGoAppointmentFolder
695 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
696 override those methods to use the "personal" additional directory.
698 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
699 append "/personal" to the calendar path to simulate a single
700 calendar in a choice of many.
702 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
703 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
704 methods back here. Moved the folder existence check here, and do
705 it on self only when the lookup happens for a non-folder object.
706 This permits to accept entries for folders with parents who
709 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
711 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
712 -shouldTakeValuesFromRequest:requestinContext:context]): same as
715 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
716 -shouldTakeValuesFromRequest:requestinContext:context]):
717 redesigned method since any method called can be received from a
718 POST or a GET. Instead we check the method call itself and we
719 accept only if it has the "save" prefix.
721 * SoObjects/Appointments/SOGoAptMailNotification.m
722 ([SOGoAptMailNotification -getSubject]): returns the subject an a
723 quoted-printable encoded string, if needed.
725 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
726 -asQPSubjectString:encoding]): moved method into
727 NSString+Utilities.m.
729 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
731 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
732 -messageForwardingList])
733 ([UIxPreferences -itemMessageForwardingText])D
734 ([UIxPreferences -userMessageForwarding])
735 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
736 new template methods for manage the user preference regarding
739 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
740 algorithm to return, in order, the user's defined language or the
741 first browser language or, finally, the default language.
742 ([SOGoUser -messageForwarding]): new method that returns the user
743 preference for message forwarding: "inline" or "attached",
744 defaulting to "attached".
746 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
747 -contentForInlineForward]): new method that returns the content of
748 the message for inline forwarding based on the SOGoMailForward
751 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
752 -fetchMailForForwarding:sourceMail]): check the user preference
753 for message forwarding and compose inline forwarded messages if required.
755 * SoObjects/Appointments/SOGoCalendarComponent.m
756 ([SOGoCalendarComponent
757 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
758 now use a template based on the language returned from the
761 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
762 a subclass of SOGoMailForward for English locale.
764 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
765 a subclass of SOGoMailForward for French locale.
767 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
768 helps build template for inline forwarded messages.
770 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
772 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
773 to handle "<var:if-ie>" template tags.
775 * UI/SOGoElements: new extension bundle containing sogo-specific
778 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
779 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
780 selected in the dialog.
781 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
782 first category, if ever, of the calendar entity.
784 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
785 -composeAction]): restored method since it is needed by the
788 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
789 -composeAction]): the address fields should be arrays and not
792 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
793 that returns the build date of SOGo in the template.
795 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
797 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
798 -_flattenedRecords:records]): when the c_cn field is empty,
799 returns set a formatted string with the concatenation of
800 c_givenname and c_sn as the displayName.
802 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
803 -isValidMailAccountName:_key]): prevent unknown accounts from
806 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
807 -pathToAttachmentObject]): we no longer need the filename
808 extension for SoLookup...
810 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
811 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
812 filename to have an extension, and thus accept any filename.
814 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
815 -currentCName]): new method that returns the c_name of the
816 contact, correctly escaped to be passed by url afterwards.
818 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
819 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
820 instance of [self decodedFlatContent] instead of the buggy
821 NSString from [super flatContentAsString] to the parser.
823 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
825 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
826 new category method to reponds to the "delete" web command on
828 ([UIxMailActions -deleteAttachmentAction]): new category method to
829 reponds to the "deleteAttachment" web command on drafts, taking
830 the "filename" url parameter into account.
832 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
833 -contentForEditing]): new method that retrieve the editable mail
835 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
836 returns the body keys for attached files (parts with a "filename"
839 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
840 -asQPSubjectString:encoding]): do not change the string if the
841 encoded string has the same length (which means it is already
843 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
844 that retrieve a draft along with its attachments for editing.
845 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
846 choke if the "to" header field is empty.
847 ([SOGoDraftObject -delete]): new method to delete the draft folder
848 whenever operations are done.
850 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
852 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
853 useless stub method, of which the intention was implemented in
855 ([-lookupSentFolderUsingAccount]): removed obsolete method.
856 ([-selectedMailIdentity]): removed obsolete method.
857 ([-lookupSentFolderUsingFrom]): removed obsolete method.
858 ([-storeMailInSentFolder:_path]): removed obsolete method, of
859 which the mechanism has been put in -[SOGoDraftObject sendMail]
861 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
862 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
863 adapted algorithms to the new SOGoDraftObject methods.
864 ([-deleteAction]): removed method since local draft objects cannot
865 be removed by the user.
867 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
868 -expungeAction]): new method replacing the one previously found in
870 ([UIxMailFolderActions -createFolderAction])
871 ([UIxMailFolderActions -renameFolderAction])
872 ([UIxMailFolderActions -deleteFolderAction])
873 ([UIxMailFolderActions -emptyTrashAction])
874 ([UIxMailFolderActions -subscribeAction])
875 ([UIxMailFolderActions -unsubscribeAction]): error situations
876 should have http return code 500 instead of 403.
878 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
879 -composeAction]): new method replacing the one previously in
882 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
883 -imap4URLString]): removed overriden method (see below).
885 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
886 cache the mailbox acl.
887 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
888 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
890 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
891 the new method of determining the users mail accounts.
893 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
894 longer adds a "/" at the end of the string (the default for
895 folders), therefore this will be overriden in SOGoMailFolder
896 rather than in SOGoMailObject.
898 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
899 method, moved into the new UIxMailActions module class.
901 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
902 -newDraft]): new method that returns a new SOGoDraftObject
903 instance with a unique filename based on the current timestamp and
904 the "newDraft" prefix.
906 -lookupName:nameinContext:localContextacquire:acquire]): overriden
907 method by detecting local drafts with their "newDraft" prefix.
908 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
910 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
911 from scratch by making it a subclass of SOGoMailFolder.
913 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
916 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
919 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
922 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
923 new method, initializing the new ivars: IMAP4ID, headers, text,
924 sourceURL and sourceFlag.
925 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
926 ([-_ensureUserSpoolFolderPath])
927 ([-saveMimeMessageToTemporaryFileWithHeaders:])
928 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
929 ([-deleteTemporaryMessageFile:], [-delete], [-content])
930 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
931 ([-uid], [-flags], [-size], [-envelope]): removed methods.
932 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
934 ([SOGoDraftObject -setSourceURL:newSourceURL])
935 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
936 methods to store the url of the original message between accesses
937 so that, depending on the action taken (forward or reply), the
938 correct flag can be given.
939 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
940 the imap4 id that is returned for the message whenever it is saved
941 into the drafts folder.
942 ([SOGoDraftObject -save]): new method that takes in charge the
943 saving of the message in the IMAP drafts folder.
944 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
945 new method that fills the original data of the new message with
946 the reply content of the original message.
947 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
948 above for message forwarding.
949 ([-spoolFileManager]): removed useless method (only returned the
950 default filemanager...)
951 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
952 the resulting message as an NSData chunk.
954 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
955 containing a rewrite of the mail action methods found in
956 UI/Mailer/, that needed to be put in the SOGoMailObject class.
957 ([SOGoMailObject -subjectForReply]): new method that returns a
958 subject suitable for replies.
959 ([SOGoMailObject -contentForReply]): new method that returns the
960 textual content of an email, quoted for replying.
961 ([SOGoMailObject -filenameForForward]): new method that returns
962 the name of the filename that should contain the forwarded
963 message, based on its subject.
964 ([SOGoMailObject -subjectForForward]): explicit.
966 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
968 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
969 -mailAccounts]): rewrote method to return the name of the mail
970 accounts now available with the -[SOGoUser mailAccounts] method.
971 ([UIxMailMainFrame -showLinkBanner]): removed method.
972 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
973 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
974 ([UIxMailMainFrame -rootURL]): removed method.
975 ([UIxMailMainFrame -userRootURL]): removed method.
976 ([UIxMailMainFrame -calendarRootURL]): removed method.
977 ([UIxMailMainFrame -contactsRootURL]): removed method.
978 ([UIxMailMainFrame -hasErrorText])
979 ([UIxMailMainFrame -errorText])
980 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
981 ([-composeAction]): removed method. Now provided by
982 UIxMailAccountActions.
983 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
984 ([UIxMailMainFrame -hideFolderTree]): removed method.
985 ([UIxMailMainFrame -treeRootClassName]): removed method.
986 ([UIxMailMainFrame +initialize]): removed method.
987 SOGoMailTreeRootClass userdefaults will no longer have any effect.
989 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
990 -redirectToLocation:newLocation]): new method that implements the
991 same functionality as WOComponent.
993 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
995 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
996 method that returns whether the current mail is store in the
997 drafts folder hierarchy.
999 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1000 ([-primaryEmail]): removed method.
1001 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1002 ([SOGoUser -mailAccounts]): new method that returns an array
1003 containing description dictionaries for all the user mail
1004 accounts. Each account also contain the user's identities for that
1006 ([SOGoUser -allIdentities]): new utility method that returns all
1007 the user identities on all accounts.
1008 ([SOGoUser -primaryIdentity]): new method return the first
1009 identity of the first account.
1011 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1013 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1014 -isInDraftsFolder]): returns NO.
1015 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1017 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1019 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1020 -isInDraftsFolder]): new method that detects if self is contained
1021 by the drafts folder by calling itself on the container object.
1023 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1025 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1026 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1027 return the name of the mail accounts now available with the
1028 -[SOGoUser mailAccounts] method.
1030 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1033 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1036 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1037 -keysWithFormat:format]): method that forward the method of the
1038 same name to each member of the array, considering they all are
1039 instances of NSDictionary.
1040 ([NSArray -objectsForKey:key]): same principle as above.
1041 ([NSArray -flattenedArray]): new method that transforms an array
1042 of arrays into a single array containing all the elements of the
1045 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1046 -keysWithFormat:keyFormat]): new method inspired by the python
1047 string formatting system and which replaces occurences of "%{key}"
1048 by the corresponding keys.
1050 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1052 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1053 sql script before the generic one when initializing mandatory
1056 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1058 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1059 -pureEMailAddress]): new utility method inspired by the
1060 "_rawSender" private method in SOGoDraftObject, which it now
1063 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1064 provides a common API for sending emails, no matter what the
1067 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1069 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1070 -quotasAction]): invoke "relativeImap4Name" instead of
1071 "nameInContainer" since the latter also returns the "folder"
1074 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1075 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1077 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1078 -deleteFolderAction]): fixed the url of the destination folder.
1080 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1081 hostname at startup.
1083 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1085 * SoObjects/Appointments/SOGoCalendarComponent.m
1086 ([SOGoCalendarComponent
1087 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1088 set the mail date to the current date string returned by our
1089 rfc822DateString extension method.
1091 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1092 -_gcsFoldersFromFolder:): ignore the personal folders who are
1093 returned but don't really exist.
1095 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1097 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1098 has to return only one element.
1100 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1102 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1103 -content]): new method returning the decoded content of the
1104 corresponding attachment as an NSData instance.
1105 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1106 the metadata parameterList is empty, try to find out the filename
1107 from the "disposition" metadata returned with the BODYSTRUCTURE
1110 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1111 -composeAction]): prefix the INBOX folder with "folder".
1113 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1114 -relativeImap4Name]): return nameInContainer stripped from its
1115 first 6 characters since all folder names are prefixed with
1118 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1119 -imap4URLString]): invoke -relativeImap4Name instead of
1120 "nameInContainer" since the former will return the fixed IMAP4
1121 foldername and the latter the SoObject name.
1123 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1124 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1126 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1127 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1128 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1129 ([SOGoMailAccount -sentFolderNameInContext:])
1130 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1131 names with "folder".
1132 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1133 ([SOGoMailAccount -sentFolderInContext:_ctx])
1134 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1135 the folder names with "folder" since they are prefixed earlier.
1137 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1139 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1140 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1141 all starts with "folder".
1143 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1144 longer declare security info from here.
1146 * SoObjects/Mailer/SOGoMailFolder.m
1147 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1148 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1149 folder names now always start with "folder".
1151 * SoObjects/Mailer/SOGoMailAccount.m
1152 ([-lookupName:inContext:acquire:]): folder names now always start
1155 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1157 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1158 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1161 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1162 code to save the attached filenames with the filename returned by
1163 the web server as well as their mime types.
1165 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1166 ([UIxMailPartMessageViewer -toAddresses])
1167 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1168 the corresponding fields separated with a ", " (if needed).
1170 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1171 -saveAttachment:_attachwithMetadata:metadata]): new method
1172 replacing -saveAttachment:withName: and which takes a dictionary
1173 as parameter with the filename and the mime type of the
1175 The mimetype is then saved in a hidden text file.
1176 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1177 take the mime type from the hidden text file related to the
1180 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1181 ([SOGoContactGCSFolder
1182 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1183 return records if the db records are > 0 and not just > 1...
1185 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1187 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1189 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1191 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1192 ([SOGoContactLDAPFolder
1193 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1194 translate the returned records to a normalized form.
1196 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1197 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1198 translate the returned records to a normalized form.
1200 * UI/Scheduler/UIxCalListingActions.m,
1201 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1202 SoObjects/SOGo/AgenorUserDefaults.m,
1203 SoObjects/Contacts/SOGoContactGCSFolder.m,
1204 SoObjects/Appointments/SOGoAppointmentFolder.m,
1205 OGoContentStore/OCSiCalFieldExtractor.m,
1206 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1207 table fields with "c_".
1209 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1211 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1212 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1213 the application settings. If set, both limit will influence the
1214 maximum size of the resultsets and the time taken to solve them.
1215 ([LDAPSource -_initLDAPConnection]): initialize the limits.
1217 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1219 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1220 method that declares the DAV namespace related to CardDAV.
1221 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1222 method that declares the "access-control" and "addressbook-access"
1223 classes to the list.
1225 * SoObjects/Appointments/SOGoAppointmentFolder.m
1226 ([-lookupActionForCalDAVMethod:]): removed method.
1227 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1228 method that declares the DAV namespace related to CalDAV.
1230 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1231 optional method for subclasses which handle specific extensions to
1232 the DAV protocol: CardDAV or CalDAV.
1234 -lookupName:lookupNameinContext:localContextacquire:acquire]):
1235 new overriden method that handles dav invocations for extensions
1236 to DAV by returning an appropriate SoSelectorInvocation.
1238 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1239 -asDavInvocation]): new method returning a dictionary with a "ns"
1240 key representing the dav namespace and a "method" key representing
1241 the dav method name of the request.
1243 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1244 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
1246 ([UIxPreferences -shouldDisplayPasswordChange]): new template
1247 method that returns the value of SOGoUIxUserCanChangePassword.
1249 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1250 scan the value of SOGoUIxDefaultModule. If not set, the default
1251 module defaults to "Calendar".
1252 ([SOGoUserHomePage -defaultAction]): redirect the user to the
1253 value of "SOGoUIxDefaultModule".
1255 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1257 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1258 -contactInfos]): cache the results to avoid multiple invocations.
1260 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1261 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
1262 really should return something or if we fake to return nil...
1264 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1266 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
1267 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
1268 default is set to "bypass".
1270 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1271 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
1272 when authMethod is set to "bypass" from now on. This would avoid a
1273 security concern with a default installation of SOGo.
1274 AuthentificationMethod is now prefixed with "SOGo" for better
1277 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1279 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1280 -quotasAction]): new method that returns a json representation of
1283 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1285 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1286 -imap4URL]): rewrote method to support accented mailbox names.
1287 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
1288 SOGoAuthenticator's passwordInContext:.
1290 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1291 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
1292 start and due dates to nil if hasStartDate and hasDueDate are
1295 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1296 -passwordInContext:context]): made method public.
1298 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1299 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
1300 to false to avoid a null violation.
1302 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1304 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1305 -contentAsString]): returns the message encoded in ISO Latin 1
1308 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
1309 SOGoSuperUsername user defaults.
1310 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
1312 ([SOGoUser -rolesForObject:objectinContext:context]): if the
1313 current user is the superuser, grant him/her the "owner" role.
1315 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1316 the folder only if the current user is the owner of the future
1319 * SoObjects/Appointments/SOGoCalendarComponent.m
1320 ([SOGoCalendarComponent -contentAsString]): we return the content
1321 based on the permissions returned by the security manager instead
1322 of by looking at the user roles.
1324 * SoObjects/Appointments/SOGoAppointmentFolder.m
1325 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
1326 folders of the user to whom this folder belongs instead of the
1327 active user. This way, a delegate user will be able to have the
1328 same view that the original user has if he connects from his user
1331 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
1332 user exists before creating the SOGoUserFolder instance. If not,
1335 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
1336 return the message source code in plain text.
1338 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1339 -contentAsString]): returns the message encoded in UTF8.
1341 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1343 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
1344 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
1345 leading tagname into account when serializing the element values.
1347 * Main/SOGoProductLoader.m: only load bundle directories ending
1348 with the "SOGo" extension.
1350 * Main/SOGo.m ([SOGo
1351 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
1352 result set if the query has caused no exception. Otherwise we get
1353 an "evaluation is in progress exception".
1355 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1357 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1358 -generateSQLForInsert]): initialize error to nil before the
1359 serialization. Otherwise the method can get confused if it ever is
1360 initialized to something else.
1362 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1363 -folderIsMandatory]): returns NO unconditionnally.
1365 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1366 -appendPersonalSources]): add the "personal" folder to the list of
1367 user folders even if it doesn't exist, so that it is created when
1368 the user accesses it.
1370 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1371 -folderIsMandatory]): returns YES if nameInContainer is set to
1372 "personal", which is the default address book.
1374 * SoObjects/Appointments/SOGoAppointmentFolder.m
1375 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
1376 users must have one Calendar folder (one and only one).
1377 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
1378 escaping '\' so make the carriage return a real one. This way,
1379 PgSQL 8 won't complain about escaping the string.
1381 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
1382 method that create the folder if considered mandatory.
1383 ([SOGoFolder -folderIsMandatory]): new method that determines
1384 whether the folder should be created automatically or not. To be
1385 overriden by subclasses.
1387 * Main/SOGo.m ([SOGo -run]): override method and create the
1388 missing system tables if needed.
1390 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1392 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1393 -mailDateFormatter]): returns the user's date formatter.
1395 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
1396 applies the user timezone to the date object before returning it.
1398 * UI/Common/UIxSortButton.m: removed useless class module.
1400 * UI/Common/UIxSortableTableHeader.m: removed useless class
1403 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1404 -contactInfos]): use the "asc" url parameter instead of "desc" to
1405 determine the ordering.
1406 ([-sortOrdering]): removed method.
1407 ([UIxContactsListView -init]): removed the "searchText" ivar.
1408 (general): the template no longer use the UIxSortableTableHeader
1411 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1412 -defaultSortKey]): default sort following the messages arrival
1413 instead of their date.
1414 ([-isSortedDescending]): removed method.
1415 ([-imap4SortOrdering]): use the "asc" url parameter instead of
1416 "desc" to determine the ordering.
1417 (general): the template no longer use the UIxSortableTableHeader
1420 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1422 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
1424 ([-setQualifier:_msg], [-qualifier]): removed methods.
1425 ([UIxMailListView -defaultAction]): added code to handle the
1426 search criteria and value passed as url parameters. Also, we now
1427 handle the same search criterias as Thunderbird/Icedove.
1429 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1431 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
1432 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
1433 the string instead of the string itself.
1434 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
1436 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
1437 bool var "acceptAnyUser" that is set when the AuthenticationMethod
1438 user default is nil.
1439 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
1440 unconditionnally returns an instance whenever acceptAnyUser is set.
1442 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1444 * Main/sogod.m (main): prevent SOGo from running as root.
1446 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1448 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1449 -setCurrentPassword:newPassword]): new stub method.
1450 ([SOGoUser -dateFormatterInContext:context]): new method that
1451 returns an instance of SOGoDateFormatter configured based on the
1454 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1455 -relativePreferencesPath]): new method.
1457 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
1458 removed useless method.
1460 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
1461 different configurable formats (long and short date + time).
1463 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
1465 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1466 -isInternetRequest]): removed method.
1468 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1469 -jsonRepresentation]): new method with an explicit name.
1471 * UI/PreferencesUI/product.plist: new bundle that provides a web
1472 ui for handling user defaults.
1474 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
1476 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
1478 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
1480 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1482 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
1484 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1486 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
1487 -compareEventsAscending:otherEvent]): no longer use compare: on
1488 the time objects since one of them could be an NSNull, which
1489 crashes when comparing with anything.
1491 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1492 -eventsListAction]): sort events from here.
1493 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
1495 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
1496 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
1498 * SoObjects/Appointments/SOGoAppointmentFolder.m
1499 ([SOGoAppointmentFolder
1500 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
1501 no longer sort elements from here.
1503 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1505 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1506 -aclsForUser:uid]): implemented method by forwarding the request
1507 to the container. This fixes a bug where users could no longer
1508 read emails from shared folders.
1510 * SoObjects/Appointments/SOGoCalendarComponent.m
1511 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
1512 here, but rather in its parent class.
1514 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
1515 -stringForSecondsSinceThe70s:seconds]): new utility method.
1517 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1518 -eventsListAction]): no longer reduce the end day of one day for
1519 all day events since everything has been fixed in
1520 OCSiCalFieldExtractor.
1522 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1523 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
1524 the end date of all day events of 1 so that they stay on their
1527 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1529 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
1531 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
1533 ([-fetchCoreTasksInfos]): removed method.
1535 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1536 -init]): initialize an instance of SOGoDateFormatter.
1537 ([UIxCalListingActions -eventsListAction]): the display start and
1538 end dates are added to the listing for each event.
1540 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
1542 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1543 -isAllDay]): returns YES if the "hm" url parameter is set to
1545 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
1546 is displayed one day earlier.
1548 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1550 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1551 -_setupContext]): take the range of dates specified by the popup
1554 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
1555 WODirectAction that returns WOResponse objects with the events or
1556 todos satisfying the parameters passed in the url.
1558 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1559 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
1560 "isAllDay" into account and compute the amount of days to pass to
1563 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
1565 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
1566 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
1567 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
1568 new method that returns a json-formatted array of the visible tasks
1569 for the current user.
1571 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1573 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
1574 object must be present in the list of UIDs we delete the object
1575 from. Otherwise Calendar objects having no organizer and no
1576 attendees will remain in their owner's Calendar.
1578 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1579 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
1580 first 3 elements of the path array if the url returned by
1581 baseURLInContext: returns a hostname.
1583 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1584 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
1585 nil, in which case a crash happens when calling hasPrefix:.
1586 ([SOGoMailFolder -_sharesACLs]): same as above.
1587 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
1588 otherUsersFolderName is nil, we return nil.
1589 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
1590 nil from [self otherUsersPathToFolder], we return nil too.
1592 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1594 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1595 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
1596 the result of [self baseURLInContext:] to avoid a double escaping
1597 in the resulting string.
1599 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
1600 the user has the "ObjectReader" role on the parent container, then
1601 he is granted the "ObjectViewer" role on this object. Same for
1602 "ObjectEraser", although this might change later.
1604 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1605 -toolbar]): determine the toolbar filename based on the
1606 permissions declared by the securitymanager. The role mechanism
1607 has been adjusted on a lowerlevel so we can simplify the code.
1609 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1610 -initWithName:newNameinContainer:newContainer]): read the content
1611 directly from here. That way we can determine whether the object
1613 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
1614 the ObjectCreator role is enabled, we also grant the ObjectEditor
1615 role to the current user.
1617 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
1618 changed the method paradigm to only return HTTP code 204. Not test
1619 is done whatsoever since the security manager does it for us.
1621 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
1622 removed method because the same exists in UIxFolderActions.m
1624 * UI/Contacts/UIxContactsUserRightsEditor.m
1625 ([UIxContactsUserRightsEditor
1626 -setUserCanReadObjects:userCanReadObjects]): new method.
1628 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
1629 "FolderEraser" and special permission "Access Object". Removed
1630 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
1631 can be used instead. Removed "FolderReader" since it is useless.
1633 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1634 -vCard]): directly use the "content" ivar since it is initialized
1635 during object creation.
1637 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1638 ([SOGoContactLDAPFolder -init]): no longer handle the
1639 nameInContainer no the container ivars. They were removed because
1640 this class is a descendant of SOGoObject which already has them.
1641 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
1642 returning "displayName".
1643 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
1646 * SoObjects/Appointments/SOGoCalendarComponent.m
1647 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
1648 ([SOGoCalendarComponent -findParticipant:user]): new name for
1649 method "participant:".
1650 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
1651 findparticipant but taking a uid string as parameter.
1652 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
1653 iCalendar automatically. Instead, this is done only when the user
1654 is a "date and time viewer".
1655 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
1656 (modifier and responder) into account by compiling them with the
1659 * SoObjects/Contacts/SOGoContactFolder.h: removed
1660 "nameInContainer" from the list of required methods.
1662 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1663 -davContentType]): returns "text/calendar".
1665 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1666 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
1667 groupdav resource-type.
1669 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1670 -davContentType]): same as below.
1672 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1673 -initWithName:newNameinContainer:newContainer]): new overriden
1674 method setting the custom owner directly.
1676 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1677 -davContentType]): same as below.
1679 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1680 -davContentType]): same as below.
1682 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
1683 declare "httpd/unix-directory".
1685 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
1686 "UTC" as fallback timezone instead of "Canada/Eastern".
1687 ([-hasEmail:email]): make use of the new NSArray's
1688 containsCaseInsensitiveString: method.
1690 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1691 -davContentType]): declare "message/rfc822" as content type.
1693 * SoObjects/Appointments/SOGoAppointmentFolder.m
1694 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
1696 ([SOGoAppointmentFolder
1697 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
1698 ([-fetchContentObjectNames]): commented out method since it was
1699 usefull only for testing Funambol.
1701 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1702 -containsCaseInsensitiveString:match]): an enhanced version of
1705 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
1707 ([-showMarkDeletedButton]): removed useless method.
1708 ([-showTrashButton]): removed useless method.
1710 * SoObjects/Appointments/iCalEntityObject+SOGo.m
1711 ([iCalEntityObject -userIsParticipant:user]): new proxy method
1712 that invoked isParticipant on self for each possible email
1713 addresses of the user passed as parameter.
1714 ([iCalEntityObject -userIsOrganizer:user]): same as above.
1716 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
1719 * SoObjects/Appointments/SOGoAppointmentObject.m
1720 ([SOGoAppointmentObject
1721 -saveContentString:contentStringbaseVersion:baseVersion]): remove
1722 method since an event may not have an organizer.
1724 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1725 -GETAction:localContext]): clarified method. Added support for
1726 content-type (thanks to Helge Hess).
1727 ([SOGoObject -initWithName:_nameinContainer:_container]):
1728 initialize and retain the owner.
1729 ([SOGoObject -davContentType]): returns "text/plain".
1731 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1733 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1734 -addUserInAclsAction]): send an acl addition mail.
1735 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
1738 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1739 -_realActionWithFolderName:folderDict]): handle the possible
1740 presence of the "mail-invitation" url parameter. If present, the
1741 user will be redirected to the relevant folder.
1743 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
1744 ([SOGoUser -language]): new method that returns the user's
1745 preferred language, or the system's if none has been set yet.
1747 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
1748 that returns the full dav url to self.
1749 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
1750 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
1751 returns the full so url to the base of the SOGo module to which
1752 self belongs, and for the specified user.
1753 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
1754 but for the current user.
1755 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
1756 required by the acl advisory templates and which returns a link
1757 the target user can click to activate its new subscription.
1758 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
1759 but for inclusion of the application/x-sogo-notification part,
1760 which will be handled by the Lightning enhancer plugin.
1762 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
1763 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
1764 do nothing yet since imap folder subscription is not handled yet.
1766 * SoObjects/SOGo/SOGoContentObject.m
1767 ([-hasSupportForDefaultRoles]): removed method.
1769 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1770 -getFullEmailForUID:uid]): new method that returns the username +
1773 * SoObjects/Appointments/SOGoCalendarComponent.m
1774 ([SOGoCalendarComponent +initialize]): the default language for
1775 mail templates is now set to English.
1777 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
1778 SOGoACLAdvisory implementing the french template for user removal
1781 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
1782 SOGoACLAdvisory implementing the french template for user
1785 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
1786 SOGoACLAdvisory implementing the english template for user removal
1789 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
1790 SOGoACLAdvisory implementing the english template for user
1793 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
1794 supercall of all the acl advistory templates. The model is based
1795 on SOGoAptMailNotification except that the template encapsulates
1796 the message to be sent. Later, we might create a superclass common
1797 to all template-based emails.
1799 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1800 -addRange:newRange]): new method that store a string
1801 representation of the NSRange passed as parameter.
1802 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
1803 any range contained in self intersect with the one passed as parameter.
1805 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
1806 store ranges in an array to prevent them from intersecting with
1807 each other during the passes.
1809 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1811 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1812 -primaryFetchMailboxInfo]): useless method. Removed.
1814 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1816 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1817 -toManyRelationshipKeys]): invoke [self subfolders].
1818 ([SOGoMailFolder -subfolders]): new method containing what used to
1819 be in toManyRelationshipKeys.
1820 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
1823 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1824 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
1825 named and at the beginning of which we put the predefined folders.
1827 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1828 -emptyTrashAction]): new method inspired by a similar one from
1829 UIxMailListView, to which we added the ability to remove
1832 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
1833 method. Replaced with a similar one in UIxMailFolderActions.
1835 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1836 -renameFolderAction]): implemented method.
1837 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
1838 specified folder. Instead, we put it in the trash folder.
1840 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
1841 method, replaced with a similar method in the new
1842 UIxMailFolderAction class module.
1843 ([-deleteFolderAction]): idem.
1845 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1846 -createFolderAction]): new method implementing subfolder creation.
1847 ([UIxMailFolderActions -renameFolderAction]): new method
1848 implementing subfolder renaming (basic implementation to be
1850 ([UIxMailFolderActions -deleteFolderAction]): new method
1851 implementing folder deletion.
1853 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
1854 web actions related to the handling of imap folder.
1856 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1858 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1859 -ownerInContext:localContext]): overriden method because we are an
1860 IMAP4 client and we need a bit more intelligence to deduce the
1861 owner of the current folder.
1862 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
1863 return an NSException so we need to be careful here to avoid a
1865 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
1866 NSException so we need to be careful here to avoid a crash.
1868 * SoObjects/Mailer/SOGoMailAccounts.m
1869 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
1870 there is no longer any concept of Intranet or Internet connection
1873 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1874 -sharedFolderName]): new method.
1875 ([SOGoMailAccount -otherUsersFolderName]): new method.
1877 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
1878 new javascript code and the new UIxMailAccountActions class.
1880 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
1881 javascript code and the new UIxMailAccountActions class.
1883 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
1884 new javascript code and the new UIxMailAccountActions class.
1886 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1887 -listMailboxesAction]): new method that returns a json-formatted
1888 tree of all the mailboxes available to the current user.
1890 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
1891 web actions related to the handling of mail accounts.
1893 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
1896 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
1897 -jsonRepresentation]): new interface method meant to be overriden
1898 by the primitive classes.
1900 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1902 * UI/MailerUI/UIxMailSplashView.m: removed.
1904 * SoObjects/Appointments/SOGoCalendarComponent.m
1905 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
1906 the uid to the list only when the user email is recognized by the
1909 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1911 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1912 -isDeletionAllowed]): completed method with the new imap acl api.
1914 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
1917 * SoObjects/SOGo/SOGoPermissions.m: added the new role
1918 "SOGoMailRole_MessageEraser".
1920 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
1921 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
1922 "defaultUserID" method into account.
1924 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
1925 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
1926 "defaultUserID" method into account.
1928 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
1929 methods to support the IMAP acls mentionned in the RFC 4314,
1930 removed the ones specific to Cyrus.
1932 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
1933 mandatory method for subclasses. Removed the SOGoDefaultUserID
1936 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
1937 overriden method to return @"<default>".
1939 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1940 -defaultUserID]): overriden method to return @"<default>".
1942 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1943 -aclsForUser:uid]): overriden method.
1944 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
1945 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
1946 ([SOGoMailFolder -defaultUserID]): overriden method.
1947 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
1949 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1951 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1952 -aclUsersForObjectAtPath:objectPathArray]): new method that being
1953 forwarded the calles to aclUsers for the GCS-based subclasses of
1956 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
1957 methods that would have been used to support IMAP acls. Replaced
1958 them with the new protocol for them that has been implemented in
1959 SOGo during the last few weeks.
1961 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1962 -hasSupportForDefaultRoles]): override method by returning "YES".
1964 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1965 -addObjectUniquely:object]): new method with an explicit name.
1967 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
1968 "acl" to "aclUsers". Now designed to return only the uid of the
1969 users involved in an ACL.
1970 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
1971 "NO" by default. To indicate to the acl editor that we don't want
1972 to handle a default user.
1974 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
1975 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
1978 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
1979 provides a view to the IMAP acls.
1981 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
1983 * UI/WebServerResources/MailerUI.js: replaced all invocations of
1984 addEventListener to the use of prototype's Event object. Also,
1985 configured all menus programmatically following descriptions lists
1986 containing their callbacks, or nulls, submenus id or separators.
1988 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1990 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1991 -addUserInAclsAction]): save the previous roles of the user
1992 (unlikely) or the default roles, or None instead of saving the
1993 roles that should appear the first time in the role editor when no
1994 default has been set...
1996 * SoObjects/SOGo/SOGoObject.m: defined a new constant
1997 "SOGoDefaultUserID".
1999 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2000 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2001 ignore the "AuthorizedSubscriber" role and add the "None" role
2002 when no other role is found.
2004 * UI/Common/UIxAclEditor.m: added a button for the new default
2007 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2008 -_initRights]): don't take the "None" role into account when
2009 initializing the list of current roles.
2011 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2014 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2016 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2017 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2018 There is no need to subscract the start from the length if a space
2019 is not found since the range has not changed either. Finally, the
2020 first character before the url might also be a tab or a cr, so we
2021 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2022 ([NSString -stringByDetectingURLs]): modified to handle email
2023 addresses and add a correct "mailto:" link.
2025 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2027 * SoObjects/Appointments/SOGoAppointmentFolder.m
2028 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2029 method to return the events in the range of 2 weeks ago up to 4
2032 * UI/MailPartViewers/UIxMailPartTextViewer.m
2033 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2034 "stringByDetectingURLs" method to offer clickable urls.
2036 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2037 -stringByDetectingURLs]): this new method replaces passive URLS
2038 with active ones for HTML resolution of the text.
2040 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2042 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2043 -asQPSubjectString:encoding]): simplified method.
2044 The headers indicates "utf-8" again thank to our fix in
2047 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2050 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2052 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2053 -removeUserFromAclsAction]): implemented this method which was
2054 missing and is required to remove users from ACLs.
2056 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2057 -subscribeAction]): folderDict was not autoreleased, resulting in
2060 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2061 -primaryFetchProfile]): when building with libFoundation, don't
2062 use the "propertyList" method from NSString. Rather, we convert
2063 the string to an NSData instance and passit as parameter to
2064 NSDeserializer. This way, we obtain a mutable dictionary rather
2065 than an immutable one.
2067 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2068 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2069 constant string "contentTypeValue".
2070 contentTypeValue is now set back to iso-8859-1 since NGMime
2071 converts extracts the data in that encoding.
2073 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2075 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2076 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2077 "bindFields" value is present in the user defaults, use the
2078 specified fields to find the dn of the user to bind.
2079 ([LDAPSource -allEntryIDs])
2080 ([LDAPSource -fetchContactsMatching:match])
2081 ([LDAPSource -lookupContactEntry:entryID])
2082 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2083 bind and unbind the connection on each request.
2085 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2087 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2088 -contactSearchAction]): simplified method to use the facilities
2089 provided by the LDAPUserManager. No longer takes care of the
2090 "ldap-only" url parameter since all requests are handled by the
2093 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2094 -primaryFetchProfile]): check that the value returned is not null
2095 before interpreting it.
2097 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2098 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2099 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2100 system email is already present, remove it before adding it.
2102 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2103 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2104 loginToCheck is not empty.
2105 ([LDAPSource -fetchContactsMatching:match]): check that match is
2107 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2109 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2112 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2114 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2116 ([SOGoUser -systemEmail]): returns the email formed from the
2117 username and the default mail domain.
2118 ([SOGoUser -hasEmail:email]): test whether the user has the
2119 specified email, in a case-insensitive way.
2121 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2122 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2123 check login information.
2125 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2126 ([SOGoContactLDAPFolder
2127 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2128 no longer manage LDAP connections. The requests are forwarded to
2129 the relevant LDAPSource instead.
2131 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2132 -appendSystemSources]): pass LDAPSource objects to
2133 SOGoContactLDAPFolder instances.
2135 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2136 address of the "from" field before sending the message. Otherwise,
2137 sending the mail won't work.
2139 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2140 rewrote this method to request all the available email identities
2141 for the current user. Also, the from field also contains the full
2142 name of the user, not just his/her email address.
2144 * SoObjects/Appointments/SOGoCalendarComponent.m
2145 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2146 from the previous module iCalEntityObject+Agenor.
2147 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2148 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2151 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2152 replacing the SOGoContactLDAPEntry module. It was renamed as such
2153 because it now receives a dictionary instead of an NGLdapEntry.
2154 It thus can now handle data from any source of LDIF data, not
2155 only coming from LDAP.
2157 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2158 implementing most of what used to be the AgenorUserManager class.
2159 The difference is that users are cached in the forme of
2160 dictionaries and many sources are used. Also, it can be used to
2161 search LDAP contacts.
2163 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2164 the concept of "ldap source", to be used by all the classes
2165 needing access to LDAP-provided information: addressbooks and the
2166 user manager. Most the method thereing are transcriptions of
2167 methods previously found in SOGoContactLDAPFolder. It also contain
2168 utility methods for user matching and authentification.
2170 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2171 module, rendered useless by code refactoring.
2173 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2174 with the freshly written "LDAPUserManager".
2176 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2178 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2179 SOGOContactLDIFEntry.
2181 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2182 module, obsoleted by code in SOGo/LDAPSource.[hm].
2184 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2186 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2187 new method with an explicit name.
2189 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2191 * SoObjects/Appointments/SOGoCalendarComponent.m
2192 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2193 replacing "isOrganizer:orOwner:" by taking only one instance of
2194 SOGoUser as parameter.
2195 ([SOGoCalendarComponent -participant:user]): new method replacing
2196 the previous "isParticipant" boolean method by returning the first
2197 participant matching the user passed as parameter. This method is
2198 used so that both the regular email address and the "system email
2199 address" of the user are matched against the participants emails.
2201 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2202 -getSystemEMailForUID:uid]): new method that returns the email
2203 formed with the user's uid and the default mail domain.
2205 * SoObjects/Appointments/SOGoCalendarComponent.m
2206 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2207 was previously commented out.
2209 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2210 forwared to [AgenorUserManager getSystemEmailForUID:].
2212 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2213 -toolbar]): method replacing the one with the same name in the
2214 task and appointment editor classes. This method makes also use of
2215 the new method "isOrganizerOrOwner:" and "participant:" in
2216 SOGoCalendarComponent.
2218 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2219 -toolbar]): removed method, replaced with a method with the same
2220 name in UIxComponentEditor.
2222 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2223 method, replaced with a method with the same name in
2226 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2227 -primaryFetchProfile]): the values returned from the database are
2228 converted to a put dictionary first, since the dictionary returned
2229 is actually an immutable one, which can cause a crash afterwards.
2231 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2233 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2234 and "SOGoRole_ObjectEditor".
2236 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2237 -prepareRightsForm]): this method is no longer mandatory.
2239 * UI/Contacts/UIxContactsUserRightsEditor.m
2240 ([UIxContactsUserRightsEditor
2241 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2242 module to handle acls related to the address books. Partial
2245 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2246 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
2249 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
2250 specified roles from cache.
2251 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2252 put resulting roles in cache.
2254 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
2255 initWithName:inContainer:. Instead, directly initialize the ivars
2256 as it is supposed to be to avoid an infinite loop whenever one of
2257 those two methods are overriden.
2259 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
2262 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2263 -aclsForUser:uid]): override method so that SOGo won't crash when
2264 loading the contact card.
2266 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2268 * SoObjects/Appointments/SOGoAppointmentFolder.m
2269 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
2270 "freebusy" special user should only require opaque elements.
2272 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2274 * SoObjects/Appointments/SOGoAppointmentFolder.m
2275 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
2276 our double declaration where the resulting XML would be screwed.
2277 There is only one collection per namespace.
2279 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
2280 rfc822DateString]): new method that returns a string conform to
2281 rfc 822 and suitable for email headers.
2283 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
2284 "rfc822DateString" category method on the date we put in the
2287 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2289 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
2290 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
2291 which should never be overriden.
2292 ([UIxUserRightsEditor -appendRight:newRight])
2293 ([UIxUserRightsEditor -removeRight:right])
2294 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
2295 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
2296 methods that can be used by the subclasses.
2297 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
2298 mandatorily be overriden to prepare the elements of the subclassed
2300 ([UIxUserRightsEditor -updateRights]): new method that should
2301 mandatorily be overriden to update the user rights from the
2302 elements of the subclassed form.
2304 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
2305 check if the uid is already listed before adding it to our array.
2306 This is because the acl table can contain more than one record per
2307 user/object relationship.
2309 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2310 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
2311 "roles" parameter is now an NSArray instead of a string. Therefore
2312 we loop throughout the array to populate the table. All the
2313 relevant records are removed prior to the addition of the new
2316 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2317 -aclsForUser:uid]): new override that returns nil until we add
2318 support for IMAP acls.
2320 * SoObjects/Mailer/SOGoMailAccounts.m
2321 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
2323 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2324 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
2326 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2327 -aclsForUser:uid]): override this method which will always return
2330 * SoObjects/SOGo/SOGoPermissions.[hm]: added
2331 [Public,Private,Confidential]
2332 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
2333 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
2334 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
2336 * SoObjects/Appointments/SOGoAppointmentFolder.m
2337 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
2338 that defines default roles for new elements in the acl.
2340 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
2341 module and subclass of UIxUserRightsEditor specific to the
2342 handling of user rights on calendar folders.
2344 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2346 * SoObjects/Appointments/SOGoAppointmentFolder.m
2347 ([SOGoAppointmentFolder -groupDavResourceType]): return both
2348 "vevent-collection" and "vtodo-collection".
2350 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
2351 that implements the detailed editor of user rights per-object.
2353 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2355 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2356 -rolesForObject:objectinContext:context]): no longer query objects
2357 for "roleForUser:". Instead, all objects should implement
2360 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
2361 new method to comply with the new acl "protocol" in SOGoObject.
2362 Uses SOGoFolder's new facilities for ACLS.
2363 ([SOGoContentObject -aclsForUser:uid]): idem.
2364 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
2365 ([SOGoContentObject -removeAclsForUsers:users]): idem.
2367 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2368 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
2369 based folders. This method is derived from the code that was in
2370 UIxAclFolder before its removal.
2371 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2374 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
2376 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
2377 ([SOGoFolder -setRoleForUsers:uidsto:role])
2378 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
2380 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
2381 that requires overriding by subclasses.
2382 ([SOGoObject -aclsForUser:uid]): idem.
2383 ([SOGoObject -defaultAclRoles]): idem.
2384 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
2385 ([SOGoObject -removeAclsForUsers:users]): idem.
2387 * UI/Common/UIxObjectActions.m: new module implementing the web
2388 actions common to SOGoObject and all its subclasses.
2389 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
2390 user with the clientObject defaults user rights to the object's
2393 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
2394 to the point where it will only list the users (and their name)
2395 associated with an object acl.
2397 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
2398 methods have been moved into SOGoObject and SOGoFolder during a
2401 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2402 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
2403 method made useless by the programmatic handling of iCalendar
2405 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
2406 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
2407 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
2409 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
2410 drop on all folder nodes, not just on leaves.
2412 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2413 ([SOGoContactLDAPFolder
2414 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
2416 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2418 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
2419 debugging facilities when the SOGoDebugObjectAllocation user
2422 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2424 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
2425 method that SOGo will need with non-gnustep Foundation
2427 ([NSString -stringByAppendingPathComponent:component]): new method
2428 that SOGo will need when building with libFoundation. Method
2429 removed later since it is available from
2430 Foundation/NSPathUtilities.h.
2432 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
2435 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
2436 every subclass to access [WOApplication context] without having to
2437 invoke it more than once.
2439 * SoObjects/Appointments/SOGoCalendarComponent.m
2440 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
2441 moved method from SOGoTaskObject and SOGoAppointmentObject up to
2444 * UI/Scheduler/UIxCalSelectTab.m: removed module.
2446 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2448 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2449 -vCard]): test the prefix of the card in a case-independent way.
2451 * OGoContentStore/OCSContactFieldExtractor.m
2452 ([OCSContactFieldExtractor
2453 -extractQuickFieldsFromContent:content]): we no longer accept
2454 records in a format other than versit vCard so we can get rid of a
2457 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2459 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2460 -selectorComponentClass]): restored method.
2462 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2464 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
2465 -shouldDisplayCurrentTask]): the current task is not displayed if
2466 it is NOT completed or if the "showCompletedTasks" flag is set.
2467 The logic was inverted in Lightning and is now in SOGo too.
2469 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2471 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
2472 want the "work" url instead of the "home".
2474 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2475 -_saveSnapshot]): save url values from snapshot.
2476 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
2478 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2479 -calendarList]): new method replacing "availableCalendars".
2481 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
2482 -calendarFolders]): we now take the list of subscribed calendar
2485 * SoObjects/Appointments/SOGoAppointmentFolder.m
2486 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
2487 method derived from and replacing [UIxCalView calendarFolders].
2489 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2491 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2492 -toManyRelationshipKeys]): don't put the predefined folders in the
2493 list if they are returned by the server.
2495 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
2496 longer store the "flattenedBlocks" in a dictionary since the
2497 object will be deleted anyway and we don't need to put the folders
2500 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2501 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
2502 attachment path into account when computing the part urls.
2504 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2506 * UI/Contacts/UIxContactsListViewContainer.m
2507 ([UIxContactsListViewContainer -additionalFolders]): take the list
2508 of subscribed folders from the new property list used for the user
2509 settings. The value of its key is SubscribedFolders for the
2510 dictionary entry named "Contacts".
2512 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2513 -canAccessContentAction]): new method to override the one from
2514 UIxFoldersActions by taking into account the fact that, this time,
2515 the clientObject is an ldap folder. Removed many method that used
2516 to be related to the handling of the user selector.
2518 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
2519 to make sure they can be removed.
2521 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
2522 populate the calendar entries based on the user settings plist.
2524 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2525 -selectForMailerAction]): restored method.
2527 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
2528 from a simplified version of the old UIxContactEditor (removed).
2530 * UI/Contacts/UIxContactsUserFolders.m: new template module for
2531 selecting users or user folders through an LDAP search of which
2532 the results are displayed as a tree.
2534 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
2535 method "onContactAdd" here since the Mailer is now the only module
2536 to use it when composing emails.
2538 * UI/WebServerResources/generic.js: added code for handling the
2539 new scheme used for describing SOGo folders, common code to handle
2540 folder addition or removal.
2542 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2543 -activateFolderAction]): new method that change the "active"
2544 settings in the folder-related fields in the user settings.
2545 ([UIxFolderActions -deactivateFolderAction]): see above.
2547 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2548 -checkRightsAction]): removed method.
2550 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2551 -updateAdditionalAddressBooksAction]): removed method.
2553 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2554 -updateCalendarsAction]): removed method.
2556 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2558 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2559 -checkRightsAction]): removed method.
2561 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2562 -canAccessContentAction]): new method designed to replace
2563 [UIxCalMainView checkRightsAction] in a more universal way.
2565 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2567 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2568 -roleOfUser:uidinContext:context]): take all the subkeys into
2569 account, not only the "personal" folder.
2571 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2572 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
2573 to the new components.
2575 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
2578 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2579 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
2580 field of the sogo_user_profile table, where the user-customizable
2581 changes will be saved.
2582 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
2583 similar to the one above, using the "settings" field where the
2584 automatic settings will be saved.
2586 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
2587 module to bind the userdefaults to a property list contained in a
2588 specified field of the sogo_user_profile table.
2589 ([AgenorUserDefaults
2590 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
2591 added a "fieldName" parameter.
2593 * UI/Common/UIxFolderActions.m: new module implementing web
2594 actions common to all GCS-based folders.
2596 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2598 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
2599 put a carriage return after the day name.
2601 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2602 -readFreeBusyAction]): restored method.
2604 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2606 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2607 -defaultAction]): remade module to redirect automatically to the
2610 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
2612 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2614 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2615 -deleteAction]): new web method to delete personal addressbook
2618 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2619 -delete]): override method to refuse the deletion of the folder if
2620 its nameInContainer is "personal".
2622 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
2623 that forwards the deletion request to the folder manager.
2625 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2627 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
2628 -zoomList]): new method that returns the list of available zoom factors.
2630 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2631 -changeStatusAction]): rewrote method.
2633 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2634 -_handleAttendeesEdition]): make sure "attendeesNames" has a
2635 length > 0 before computing the attendees. Otherwise there will be
2636 an invalid empty entry.
2637 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
2638 organizer when there are attendees and remove it when the
2639 attendees are removed.
2641 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2643 * UI/Scheduler/UIxAttendeesEditor.m): new component.
2645 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
2646 the task and appointment editors. Now a container component
2647 handling the common elements of tasks and events.
2649 * UI/Scheduler/UIxTaskEditor.m: same as below.
2651 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
2652 a subclass of UIxComponentEditor but a subcomponent of it.
2654 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
2655 toolbar can have the special value "none" to indicate there is
2656 none attached to the window.
2658 * SoObjects/Appointments/SOGoCalendarComponent.m
2659 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
2661 ([SOGoCalendarComponent -isParticipant:email]): new method.
2662 ([SOGoCalendarComponent -calendar:create]): takes one parameter
2663 "create" which is a boolean indicating whether we want to create
2664 the calendar if it does not exist.
2666 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2668 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
2669 of a table, the same way the dayly and weekly views have been for
2672 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
2674 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
2677 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
2678 property to point at the user folder
2680 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2682 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2683 -userInContext:]): returns "SOGoUser".
2685 * SoObjects/Appointments/SOGoCalendarComponent.m
2686 ([SOGoCalendarComponent -contentAsString]): overriden method that
2687 takes the privacy into account and discard the relevant fields if
2688 needed by generating a new content string and caching it.
2689 ([SOGoCalendarComponent
2690 -saveContentString:contentStringbaseVersion:baseVersion]): if the
2691 new method above has cached a content string, release it and set
2692 it to nil so that it will have to be regenerated in the case it is
2694 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
2695 discard the fields that have to be hidden when the card is
2698 * SoObjects/Appointments/SOGoAppointmentFolder.m
2699 ([SOGoAppointmentFolder
2700 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
2701 sure the cards are now handled as instances of
2702 SOGoCalendarComponent instead of SOGoContentObject so that their
2703 content string is taking the privacy classifiction into account.
2704 ([SOGoAppointmentFolder -_privacySqlString]): new method that
2705 generates a query to determine what information can be given and
2706 if the card itself has to be shown.
2708 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2709 -getICalPersonsFromValue:selectorValue]): removed useless
2710 "isAccessRestricted" method.
2712 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2713 -setStyle:_style]): test whether the values of orgmail and
2714 partmails are null before manipulating them, otherwise SOGo sends
2715 a "rangeOfString:" message to an NSNull, which makes it crashes.
2717 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2718 -extractQuickFieldsFromEvent:_event]): we now use the new
2719 "symbolicAccessClass" method from iCalEntity to determine the
2720 value of the "classifiction" field.
2721 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
2724 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2726 * SoObjects/Appointments/SOGoAppointmentFolder.m
2727 ([SOGoAppointmentFolder
2728 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
2729 see below, the query is adapted consequently.
2731 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2732 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
2733 renamed to "classification" and can any integer as value.
2734 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
2737 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2739 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2740 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
2741 don't prepend anything to the class and id named. Instead, we
2742 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
2745 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2747 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2748 -rolesOfUser:logininContext:context]): if object does not exists
2749 (for example when it's being created), the current user has the
2750 same rights on it than he/she has on its parent container.
2752 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2753 -nameExistsInFolder:objectName]): methods that tests if a c_name
2754 corresponding to the name passed as parameter is present in the db
2757 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2759 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2760 -rolesForObject:objectinContext:context]): test for
2761 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
2763 * SoObjects/Appointments/SOGoCalendarComponent.m
2764 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
2765 returns the roles of the user on the container object if the event
2768 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2770 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
2771 alternativeViewer a multipart/related message is being handled.
2773 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
2776 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
2777 text/html component before text/plain.
2779 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2780 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
2781 fetching of HTML parts.
2783 * SoObjects/Appointments/SOGoCalendarComponent.m
2784 ([SOGoCalendarComponent -componentTag]): new template method that
2785 returns the vcalendar tag of the current object.
2786 ([SOGoCalendarComponent -component]): new method that returns the
2787 first object matching [self componentTag] within the current
2788 calendar object. This method replaces 'firstEventInCalendar:' as
2789 well as "firstTaskInCalendar:".
2790 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
2791 moved method from SOGoAppointmentObject.m.
2793 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2795 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
2796 module which shows each selected user's calendar in a different
2797 column instead of mixing their events together.
2799 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
2800 replaced use of [NSString stringByTrimmingWhiteSpaces] with
2801 [NSString stringByTrimmingSpaces].
2803 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
2804 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
2807 * UI/Scheduler/UIxCalDayOverview.m,
2808 UI/Scheduler/UIxCalDayChartview.m,
2809 UI/Scheduler/UIxCalDayListview.m,
2810 UI/Scheduler/UIxCalWeekOverview.m,
2811 UI/Scheduler/UIxCalWeekChartview.m,
2812 UI/Scheduler/UIxCalWeekListview.m,
2813 UI/Scheduler/UIxCalInlineMonthOverview.m,
2814 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
2816 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2818 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2819 -appendPersonalSourcesInContext:context]): release connectoin
2820 channel when everything is done.
2822 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2823 -newAbAction]): new action method to crate a new contact folder
2826 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
2827 that requests the folder manager to create a folder table with the
2828 specified type at the specified path. The type is taken from [self
2831 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2832 -folderType]): implemented.
2834 * SoObjects/Appointments/SOGoAppointmentFolder.m
2835 ([SOGoAppointmentFolder -folderType]): implemented.
2837 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2838 -appendPersonalSourcesInContext:context]): we now fetch all
2839 folders with type "Contact" that belong to the current user.
2840 ([SOGoContactFolders -newFolderWithName:name]): new method to
2841 create a new contact folder.
2843 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
2844 resulting url with [NSString+Utilities hostlessURL] instead of
2845 using NSURL. This is because the url in question sometimes has a
2846 hostname and sometimes not. "hostlessURL" ensure the hostname is
2848 ([UIxComponent -applicationPath]): same as above.
2850 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
2852 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
2853 folders before doing the one on messages.
2855 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2857 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
2858 makeObjectsPerform:withObject:withObject: for GNUstep
2861 * OGoContentStore/GNUmakefile, Protocols/common.make,
2862 SoObjects/common.make, UI/common.make: install in
2863 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
2865 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
2867 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
2870 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2872 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
2873 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
2876 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2877 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
2878 password would be accepted anyway as long as its length was > 0.
2879 This can be the case ONLY when LDAP is disabled otherwise we have
2880 a serious security issue...
2882 * SoObjects/Appointments/SOGoAppointmentObject.m
2883 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
2884 user is not an organizer nor a participant, he is declared as
2885 "Owner" if he owns the calendar the entry where the entry is
2886 contained. Other cases should not be possible.
2888 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2890 * UI/Contacts/UIxContactEditor.m: display and handle the new
2893 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2894 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
2897 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2898 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
2901 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2903 * SoObjects/Appointments/SOGoCalendarComponent.m
2904 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
2905 returns the value of ud "SOGoAppointmentSendEMailNotifications"
2907 ([SOGoCalendarComponent
2908 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
2910 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2912 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2913 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
2914 so that the mailbox cache is refreshed everytime the user presses
2915 on "get mail". I doubt a mailbox cache really is useful in general
2918 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2920 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2921 -userInContext:]): if the lookup is on "freebusy.ifb" and the
2922 username is "anonymous" the user is automatically set to
2925 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2927 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2928 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
2929 user with password "freebusy".
2931 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2932 -contentAsString]): the default timerange is now 14 days before
2933 currentday and 1 month after.
2935 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2937 * SoObjects/Appointments/SOGoAppointmentFolder.m
2938 ([SOGoAppointmentFolder
2939 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
2940 escape the record string in a way suitable with XML encoding.
2942 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2944 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
2945 calendar view would not be updated properly.
2947 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2949 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2950 -newStartDate]): fix the handling of the component start date
2951 depending on the "hm" and the "day" parameters.
2953 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2954 -roleOfUser:uidinContext:context]): set role of current user to
2955 "Assistant" if the object that is accessed is "freebusy.ifb".
2957 * SoObjects/Appointments/SOGoAppointmentFolder.m
2958 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
2959 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
2960 ([SOGoAppointmentFolder
2961 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
2962 lookupCalendarFolderForUID: method, which doesn't do security
2965 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2967 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
2968 accessor that returns the comma-separated list of users with role
2970 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
2971 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
2972 "checkedUsers". Instead, each user is either classified in the
2973 list of assistants or the list of delegates.
2975 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2977 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2978 -composeAction]): method imported from removed container modules.
2979 ([UIxMailMainFrame -mailFolderName]): method imported from removed
2982 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
2983 for wrapping UIxMailView with the "popupview" action.
2985 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
2986 since its the component that displays the same splash screen than
2987 the one in Thunderbird/Icedove.
2989 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
2990 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
2991 UI/MailerUI/UIxMailListViewContainer.[hm],
2992 UI/MailerUI/UIxMailViewContainer.[hm]: removed
2994 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2996 * UI/WebServerResources/HTMLElement.js: replaced the functional
2997 selectNode() and deselectNode() functions with select() and
2998 deselect() methods of HTMLElement.
3000 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3001 events are initialized from here now instead of in the HTML code.
3003 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3004 -checkRightsAction]): new method similar to the one with the same
3005 name in UIxCalMainView.m.
3007 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3008 code to handle the publishing of freebusy information.
3010 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3012 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3013 -checkRightsAction]): new action method that returns a
3014 comma-separated list of boolean values matching the right of the
3015 current user to "view" (as a permission) each foreign calendar
3016 stored in his preferences.
3018 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3019 new method that sets a customOwner, which can be returned with
3020 ownerInContext it set.
3022 * SoObjects/Appointments/SOGoAppointmentFolder.m
3023 ([SOGoAppointmentFolder
3024 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3026 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3028 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3029 below, but for the Contacts and Calendar collections.
3031 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3032 new acl facilities method from sope-gdl/GCSFolder.m.
3034 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3035 -roleOfUser:uidinContext:context]): new method that returns
3036 SOGoRole_Assistant when the user is an assistant or a delegate on
3037 the "personal" ab object. This is so that setting roles on the
3038 SOGoContactFolders object is not required.
3040 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3042 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3044 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3045 to the handling of the user selection for the acls.
3047 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3048 values from SoPermissions with ones specific to SOGo.
3050 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3051 handles the storage for the acls.
3053 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3054 class for SOGoAppointmentObject and SOGoTaskObject.
3056 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3057 general editor for folder acls.
3059 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3061 ([NSString -davMethodToObjC]): method that returns the method name
3062 for a DAV property implementation.
3064 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3066 ([NSArray -stringsWithFormat:format]): new method that returns
3067 formatted occurences of the strings stored in the array.
3069 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3070 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3071 subclass module of SoWebDAVValue that supports collections of
3072 properties of the same type.
3074 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3076 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3077 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3078 configure the name of the SOGoDraftFolders with the ud var
3079 "SOGoDraftsFolderName".
3081 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3083 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3084 -userTimeZone:username]): new method that returns the timezone for
3085 the specified user depending on his preferences and the server
3088 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3089 -stringForData:partInfo:]): take the encoding into account and
3090 translate the text to "normal" before processing the charset data.
3092 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3094 * UI/WebServerResources/generic.js: the progress indicator is on
3095 when loading the page so we turn it off, and we turn it back on
3096 whenever we switch to another module...
3098 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3099 synchronization mechanism works everywhere.
3101 * UI/WebServerResources/generic.js: the log window is not only
3102 visible when UIxDebugEnabled is set.
3104 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3105 cells are now initialized with the DOM event interface methods
3106 instead of with html attributes.
3108 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3109 headers (should be made configurable at some point)...
3111 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3112 "not null" constraint on startdate, enddate, isopaque,
3113 participants and partmails.
3115 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3117 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3118 -hoursToDisplay]): prevent a crash by retaining the
3119 "hoursToDisplay" array after it's created.
3120 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3121 clickable hours DIV.
3123 * UI/WebServerResources/SchedulerUI.js: made the event
3124 participation status modification asynchronous, which also fixes a
3125 bug where the window would sometimes close before the accept or
3126 decline action was completed. Also, adapted the event handling
3127 related to the days or weeks view with the new DIV-based layout.
3129 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3131 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3132 DIV-based presentation of the days and weeks.
3134 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3136 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3137 might return an exception so we have to handle it if we don't
3140 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3142 * UI/WebServerResources/SchedulerUI.js: updated the list
3143 initialization code to use the new event management scheme, adding
3144 what was missing to be able to delete events and tasks again.
3146 * UI/WebServerResources/MailerUI.js: added code to activate the
3147 "Get mails" button. Fixed a bug which prevented messages to be
3150 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3151 navigation and focus handling of INPUTs.
3153 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3155 * UI/WebServerResources/MailerUI.js: added code to handle the
3156 possible drag and drop events to manager in the mail module.
3157 Moving messages, opening parent folders, ...
3159 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3160 the drag and drop manager as well as the interface to HTMLElement
3161 to trigger drag and drop events.
3163 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3164 action to move the current message to the mailbox named after the
3165 value of parameter "tofolder".
3167 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3168 -moveToFolderNamed:folderNameinContext:]): new method base on
3171 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3173 * UI/WebServerResources/generic.js: added and activated many
3174 "load" handlers to configure generic widgets used across the
3175 modules. More events are now handled in a DOM-fashion way instead
3176 of by setting the relative attributes in the templates.
3178 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3179 declared from the javascript DOM onload handlers.
3181 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3184 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3185 declared from the javascript DOM onload handlers.
3187 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3188 we want everything to be separated from each other, as much as
3191 * UI/WebServerResources/SOGoDragHandles.js: new module containing
3192 the "SOGoDragHandlesInterface", implementing methods that can be
3193 attributed to DIV so that they can be used as drag handles.
3195 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3196 -asQPSubjectString]): initialize the tmp strings with '0' to make
3197 sure they don't contain garbage.
3199 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3201 * UI/WebServerResources/MailerUI.js: register the messageList
3202 table as a dragging source and the leaf of the navigation tree as
3203 dnd destinations to the DNDManager.
3205 * UI/WebServerResources/generic.js: initialize tabs from the
3206 "unload" event listener that is added programmatically instead of
3207 from the template... Also, added the new DNDManager object.
3209 * UI/WebServerResources/HTMLTableElement.js: added code to
3210 simulate XUL drag n drop events. This code will possibly be moved
3211 to HTMLElement.js instead later...
3213 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3214 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3217 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3218 -_qualifierForFilter:filter]): only search records which starts
3219 with the specified pattern.
3221 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3223 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3224 -asQPSubjectString]): new method that returns the special QP
3225 string with its qp declaration for email subjects.
3226 ([SOGoDraftObject -bodyPartForText])
3227 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3228 double-encode data in UTF-8.
3230 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3231 -newStartDate]): new method to determine the start date depending
3232 on the URL parameters, the current day and the current time.
3233 ([UIxComponentEditor -toolbar]): new method to determine the
3234 filename of the toolbar that should be drawn depending on the
3235 ownership and the list of attendees of the task/event wrt to the
3238 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3239 -setDayStartHour:aStartHour]): adjust the minutes to the next
3240 quarter of hour, if not already set to a quarter.
3242 * UI/WebServerResources/UIxAppointmentEditor.js,
3243 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
3246 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3248 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3249 -loadValuesFromComponent:component]): handles access class
3250 (privacy) and status.
3252 * UI/Contacts/UIxContactsListViewContainer.m
3253 ([UIxContactsListViewContainer -additionalFolders]): return nil if
3254 [self additionalAddressBooks] returns an empty string.
3256 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3258 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
3259 rangesOf7Days]): enhanced and debugged algorithm to feed the array
3260 with slices where the first day is still in the requested month.
3262 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
3265 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
3266 of events in the day boxes of the calendar's monthly view.
3268 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
3269 -davContentType]): declare "text/calendar".
3271 * SoObjects/Appointments/SOGoAppointmentObject.m
3272 ([SOGoAppointmentObject -davContentType]): declare
3275 * SoObjects/Appointments/SOGoAppointmentFolder.m
3276 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
3277 HTTP methods are handled by SOPE and requires nil to be returned,
3278 this method now invokes the new
3279 "requestNamedIsHandledLater:inContext:" method to check that.
3280 ([SOGoAppointmentFolder
3281 -requestNamedIsHandledLater:nameinContext:context]): new methods
3282 that returns "YES" only for the "OPTIONS" http method (for now...).
3283 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
3284 overloaded method to append the "access-control" and
3285 "calendar-access" DAV abilities to the initial declaration.
3287 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
3288 imitate the look of Sunbird/Lightning's monthly view.
3290 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
3291 UIxCalMonthViewOld.[hm].
3293 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3295 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
3296 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
3298 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
3299 returns an image name based on the participation status of the
3302 * UI/WebServerResources/SchedulerUI.js: same strip down as for
3305 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
3306 ([UIxContactsListViewContainer -additionalFolders])
3307 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
3308 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
3309 methods to handle the external addressbooks a user has subscribed
3310 too, by retriving them from his preferences.
3312 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3313 -updateAdditionalAddressBooksAction]): new method that updates the
3314 user settings with the list of addressbook he has subscribed to.
3316 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
3317 module for the address book selector.
3319 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3320 a toolbar with two buttons ("add" and "remove") to manage the
3321 additional addressbooks a user might subscribe to.
3323 * UI/WebServerResources/ContactsUI.js: added code to handle
3324 "external addressbooks" from the Javascript point-of-view, by
3325 extending existing methods and adding code for the "add ab" and
3326 "remove ab" buttons.
3328 * UI/WebServerResources/generic.js: moved extensions methods to
3329 DOM elements to separate files for better clarity.
3331 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
3332 new method that returns "pageContent" as class, but also "popup"
3333 for the DIV where the page content lies, so that we can manipulate
3334 the content of popup's with CSS identifiers.
3336 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3338 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3339 -displayStyle]): new method that returns a string containing the
3340 css style relative to the current appointment cell. This code is
3341 currently inactive but might be reused later.
3343 * UI/WebServerResources/SchedulerUI.js: added code to handle the
3344 display of the selected day (the day pointed by the mouse, or the
3345 current day when changing the view).
3347 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3348 -dayCellClasses]): new method that returns a string containing the
3349 css classes applicable to the current cell, depending on the
3350 position of the day in the week, the day of today and the
3353 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
3354 -currentContactAptBorder]): new method that returns the
3355 appropriate border color for the specified user.
3357 * SoObjects/Appointments/SOGoAppointmentObject.m
3358 ([SOGoAppointmentObject
3359 -saveContentString:contentStringbaseVersion:baseVersion]):
3360 overloaded method that parse new events and detects if they have
3361 an organizer or not. If they are new and have no organizer set
3362 (Sunbird/Lightning...), the owner of the event is set as
3365 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
3366 category that provides facility methods and interfaces to the
3369 * SoObjects/Contacts/product.plist: give full access to ANY
3370 authenticated user, not just the owner (to every objects...).
3372 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3374 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
3375 every replica widgets are declared as such to their master
3376 counterpart. Take the days into account when displaying the time
3377 range taken by the appointment.
3379 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3380 -getICalPersonsFromValue:selectorValue]): method taken from
3381 UIxFreeBusyUserSelector, that is shared both by
3382 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
3384 * SoObjects/Appointments/SOGoAppointmentFolder.m
3385 ([SOGoAppointmentFolder
3386 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): reverted to search algorithm to search for events happening outside 0 or 1 (at most) boundary of the timerange.
3388 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
3389 derived and taken as a subset of UIxFreeBusyUserSelector that
3390 implements the table part of the FreeBusy view. Most of the
3391 methods of UIxFreeBusyUserSelector relative to that table were
3392 moved into UIxFreeBusyUserSelectorTable, which can also be used as
3393 a standalone view for AJAX operations.
3395 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3397 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3398 -vCard]): change reverted.
3400 * UI/Contacts/UIxContactEditor.m: check whether the client contact
3401 folder has selector "globallyUniqueObjectId" before calling that
3404 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3405 -vCard]): the "setVClass" NGVCard method really is "setClass"
3408 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3409 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
3410 request the "streetAddress" instead of the "streetaddress".
3411 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
3412 mails that *contain*, and not just *start with* the search
3415 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3416 -vCard]): mark address returned from LDAP as the work address.
3418 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
3419 span covered with the anchor, not only the textual information
3422 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
3423 argument (event or task) to newEvent in the appointmentListMenu.
3424 Make the appointmentsListView display the appointmentsListMenu.
3426 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
3427 12 to 50 before displaying "...".
3428 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
3429 if its length > 0, whether location itself is nil or not...
3430 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
3431 of which the length > 0.
3433 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3435 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
3436 french and ISO dates.
3438 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
3439 from UIxContactSelector to handle contact lists (current and
3440 additional contacts).
3442 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3443 -_freeBusyAsText]): added handling of an "additional"-named query
3444 parameter that describe the number of additional days after
3445 enddate that should be returned.
3447 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3448 -_responseForResults:results]): give priority to results with
3449 "c_uid" fields. If none returned, use the first contact received.
3451 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3452 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
3453 2 and "CANCELLED" to 0.
3455 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3457 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
3458 of start and end dates to short string dates.
3460 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3461 -readFreeBusyAction]): new method that returns an array of numbers
3462 corresponding to the state in the freebusy of each "quarter of an
3463 hour" between the "sday" and "eday" date parameters passed in the
3464 url. This permits to handle the display of the freebusy with Ajax
3466 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
3467 since the free busy displays 2 days ahead.
3469 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3470 -contactSearchAction]): new action that returns the uid and the
3471 username + email of the user whose name contain the value of the
3472 "search" url parameter.
3474 * SoObjects/Appointments/SOGoAppointmentFolder.m
3475 ([SOGoAppointmentFolder
3476 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
3477 useful for the computing of the status of the freebusy.
3479 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
3480 -init]): new component that incarnates a user selector for events
3481 inspired by the new one found in Thunderbird Lightning.
3483 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3485 * UI/WebServerResources/generic.js: added code to enable or
3486 disable anchor visually (following our internal algorithm).
3488 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
3489 added new "url" ivar with its classic accessors.
3490 ([UIxComponentEditor -urlButtonClasses]): new method that returns
3491 the class strings for the url button on the appointment/task
3492 editor (depending on the validity of the url).
3494 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
3495 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
3496 the template to match the Lightning's new task/appointment editor.
3498 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
3500 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
3502 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3504 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3505 ([SOGoContactLDAPFolder
3506 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
3508 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
3509 iCalEntityObject instances instead of just iCalEvent's.
3511 * SoObjects/Appointments/SOGoAppointmentFolder.m
3512 ([SOGoAppointmentFolder
3513 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
3515 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
3516 bad way of handling ownership that way.
3518 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3519 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
3520 on "cn", just like Mozilla.
3522 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3524 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
3525 "to" should be retained, otherwise it will be autoreleased and a
3528 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3529 -writeAction]): updated method to fetch the card before initing
3532 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3533 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
3536 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3537 -iCalStringTemplate]): start and due date are now optional.
3539 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3540 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
3541 appropriate accessors to be settable through the templates.
3543 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
3544 new "isDisabled" ivar with appropriate accessors to be
3545 settable through the templates.
3547 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3548 -availableCalendars]): new method that list the calendars to which
3549 the user has subscribed.
3550 ([UIxComponentEditor -componentOwner]): returns the owner of the
3553 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3554 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
3555 quickentries to null whenever each or all of them are null, by
3556 providing an impossible timestamp from with NSNotFound as value.
3558 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3560 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
3561 that handles the creation of new fields with the new APIs and the
3562 new node structure on the page.
3564 * UI/Scheduler/UIxAppointmentEditor.m,
3565 UI/Scheduler/UIxTaskEditor.m:
3566 refactored to user UIxComponentEditor as parent class.
3568 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
3569 containing the methods common to the UIxTaskEditor and the
3570 UIxAppointmentEditor.
3572 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3574 * SoObjects/Appointments/SOGoAppointmentFolder.m
3575 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
3576 the handling of time-ranges.
3578 * UI/WebServerResources/ContactsUI.js: specify a notification type as
3579 parameters when onConfirmContactSelection in invoked.
3581 * UI/WebServerResources/generic.js: specify a notification type as
3582 parameters when onContactRemove in invoked.
3584 * UI/WebServerResources/SchedulerUI.js: when the user deselects
3585 all calendars, select his entry.
3587 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3589 * UI/WebServerResources/SchedulerUI.js: edit and delete events
3590 with their owner-relative urls. Generate a correct entry in the
3591 css color table when a user is added to the calendars list. Put
3592 the same color next to the user id.
3594 * UI/WebServerResources/generic.js: implemented some new helper
3597 * SoObjects/Appointments/SOGoAppointmentFolder.m
3598 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
3599 entries if their owner is not the current user.
3601 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3602 -displayClasses]): return the correct class for the current event
3603 representation depending on its owner.
3605 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
3606 and associate a color for each user login depending on its
3607 position in the list.
3609 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
3610 -currentRowCSSClass]): return the correct class for the current
3611 row depending on the owner of the event.
3613 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3614 -setColors:colors]): new method to associate a color table with
3615 each user in the list.
3617 * SoObjects/Appointments/SOGoAppointmentFolder.m
3618 ([SOGoAppointmentFolder
3619 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
3621 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
3622 NSObject to associate an instance with a user.
3624 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3626 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
3629 * UI/WebServerResources/ContactsUI.js: added handling of
3630 notification of changes to contact selectors.
3632 * UI/WebServerResources/generic.js: added handling of notification
3633 of changes to contact selectors.
3635 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3636 -updateCalendarsAction]): proxy method to update the user
3637 preference table with the new selected calendar uids.
3639 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3640 -calendarsContactsAction]): new method.
3642 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
3643 ([UIxContactSelector -setHasCheckBoxes:aBool])
3644 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
3645 permit the drawing of checkboxes instead of card icons.
3647 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
3648 wrap a selector the the "Calendars" tab.
3650 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
3651 new user calendar selector.
3653 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3655 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
3656 may cover hour 0 to hour 23.
3658 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3659 -iCalStringFromQueryParameter:format:]): dates explicitly set to
3662 * UI/WebServerResources/SchedulerUI.js: manage both lists of
3663 objects wrt to the toolbar actions.
3665 * UI/WebServerResources/generic.js: added code to the "String"
3666 class to decode number-encoded char entities.
3668 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3669 -batchDeleteAction]): new method to delete selected entries in the
3672 * SoObjects/Appointments/SOGoAppointmentFolder.m
3673 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
3674 that delete identified entries in batch.
3676 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3677 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
3679 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
3680 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3681 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
3682 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3684 return a UIxJSClose component if everything went fine.
3686 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
3689 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
3690 UIxAppointmentEditor.m.
3692 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
3693 a very light page with javascript code to close a window, by
3694 calling a method on the opener if specified. This component is
3695 designed to work as a response to form postings.
3697 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3699 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
3700 SOGoAppointmentObject adapted for the handling of tasks.
3702 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
3703 extracted from SOGoAppointmentObject.
3705 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3706 -saveUrl]): returns the url needed to POST the new form to.
3707 redirect the user to <aptid>/editAsAppointment instead of /edit,
3708 so that SOGoAppointmentFolder can return the correct object type.
3710 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
3711 -compareAptsAscending:_other]): accept empty start or end dates.
3713 * SoObjects/Appointments/SOGoAppointmentFolder.m
3714 ([SOGoAppointmentFolder
3715 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): added a "component" parameter to match the query against the specified component types. Made startDate and endDate optional by ignoring them altogether in the query whenever one of them is nil.
3716 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
3717 components of type "vtodo" as well as "vevent".
3718 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
3719 url specified ends with AsTask or AsAppointment, returns the
3720 an object of the appropriate class, otherwise deduce it from its
3721 content if the HTTP method is "PUT", otherwise read its type from
3724 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3725 -extractQuickFieldsFromTodo:_task]): extract quick fields from
3728 * UI/Scheduler/UIxCalView.m ([UIxCalView
3729 -fetchCoreAppointmentsInfos]): replacement methods for
3730 fetchCoreInfos but by retrieving object with component "vevent".
3731 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
3734 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
3735 UIxCalAptListView adapted for the handling of tasks.
3737 * UI/Scheduler/UIxTaskProposal.[hm],
3738 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
3739 clones of the UIxAppointment* classes for the handling of tasks.
3741 * UI/WebServerResources/UIxTaskEditor.js: clone of
3742 UIxAppointmentEditor adapted for the handling of tasks.
3744 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
3745 Scroll the daily view to the appropriate hour when an appointment
3746 is selected in the appointments list.
3748 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3750 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3751 -setDayStartHour:aStartHour]): specifies the user timezone on the
3754 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
3757 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
3758 ([NSCalendarDate -driftedDate]): methods made useless by a better
3759 comprehension of the NSTimeZone API...
3761 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3763 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
3764 new methods from the NSCalendarDate methods.
3766 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
3767 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
3769 +dateFromShortDateString:dateStringandShortTimeString:timeStringinTimeZone:timeZone]): new method that generates a date from two short string formatted as follow: "yyyymmdd" and "hhmm". Thismethod replaces a similar method from UIxComponent (noted below).
3770 ([NSCalendarDate -adjustedDate]): this method returns another
3771 instance set to the correct hour after the original date was set
3772 from a non-GMT timezone. This date can be used for storage.
3773 ([NSCalendarDate -driftedDate]): this method does exactly the
3774 opposite of -adjutedDate, that is, it enables the method
3775 hourOfDay, minuteOfHour etc... to return the values according to
3776 the original date's timezone. This date CANNOT be used for storage.
3778 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
3779 -shortDateString]): new method that will return a "short date
3780 string" (yyyymmdd) from a calendar date object.
3782 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3783 -_cDateFromShortDateString:dateStringandShortTimeString:timeString]): new method to compute the selected date from the "day" and "hm" query parameters (if found). This method replaces the old algorithm that was found in the "selectedDate" method.
3785 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
3786 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
3788 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3790 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
3791 view of the day at the height of hour 8:00.
3793 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
3794 ([UIxCalView -dayEndHour]): returns 24.
3796 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
3797 ([UIxContactFoldersView -newAction]): invoke
3798 _selectActionForApplication: on self with the proper attribute too.
3800 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
3801 we now use the action mechanism in UIxContactsListView to keep the
3802 same view for the contact selectors and the regular contact view.
3804 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
3805 UIxContactsListViewContainerBase.[hm]
3807 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
3809 * UI/WebServerResources/generic.js: generalized emailstring
3810 handling functions. Generalized address book access functions.
3812 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3813 -isPopup]): return YES if the "popup" query parameter is set.
3815 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3816 -defaultAction]): keep the url parameters when redirecting.
3817 ([UIxContactFoldersView -selectForSchedulerAction])
3818 ([UIxContactFoldersView -selectForMailerAction]): new action
3819 methods for the /scheduler-contacts and /mailer-contacts invocations.
3821 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
3822 newly available NSString+URL category.
3824 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
3825 -asURLParameters]): handle dictionary entries which could be
3826 instances of NSArray rather than NSString.
3828 * SoObjects/SOGo/NSString+URL.m ([NSString
3829 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
3830 ([NSString -urlWithoutParameters]): new method that returns the
3831 url without its parameters.
3833 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
3835 * SoObjects/SOGo/NSDictionary+URL.[hm],
3836 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
3838 * UI/WebServerResources/UIxMailEditor.js: add support for
3839 additions of different types (to, cc, bcc) of recipients from the
3842 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
3845 * UI/Contacts/UIxContactsMailerSelection.m,
3846 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
3847 UI/Contacts/UIxContactsSelectionView.m to provide a different set
3848 of widgets depending on the application invoking the contact list.
3850 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3852 * UI/WebServerResources/ContactsUI.js: hide the current contact
3853 whenever the user changes of contact folder.
3855 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
3856 now provided by the template when loading the page.
3858 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3859 -iCalPersonWithUid:uid]): new method taken from removed module
3862 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3864 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
3865 -categoriesAsString]): same as below.
3867 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
3868 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
3870 * SoObjects/Appointments/SOGoAppointmentObject.m
3871 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
3872 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
3875 * SoObjects/Appointments/SOGoAppointmentFolder.m
3876 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
3877 hackish test to detect whether the request concernes VEVENT's or
3878 anything else. Return events only in the former case.
3879 ([SOGoAppointmentFolder
3880 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
3881 c_name quickfield so that the calendar list can identify the
3882 appointments with their complete "filename".
3884 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
3885 groupsOfClass:fromSource: to parse the given vcalendar.
3887 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
3889 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
3891 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
3894 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
3896 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3898 * SoObjects/Appointments/SOGoAppointmentFolder.m
3899 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
3900 sensitive to the CalDAV method names.
3901 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
3902 "calendar-query" CalDAV method name.
3904 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
3905 code coming originally from MailerUI.js.
3907 * UI/WebServerResources/UIxContactEditor.js: imitate the
3908 Thunderbird address book by completing the display name with the
3909 content of the first and last name fields, until the display name
3910 is modified manually.
3912 * UI/WebServerResources/generic.js: added a "trim" method to the
3915 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3916 -displayName]): new method that returns the display name from "cn"
3917 or from the "displayName" key if found.
3919 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3920 -initSnapshot]): check if "[card n]" returns anything to avoid a
3923 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
3924 that returns an unparsed doctype definition for the pages.
3926 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3927 -vCard]): set the card's fn to attribute "displayName" if found
3930 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3932 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3933 -vCard]): handle the "streetAddress" and "l" fields.
3935 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
3936 header fields by converting the tables to DIVs and SPANs.
3938 * UI/WebServerResources/generic.css: attempted unification of font
3939 families and size across all the elements. changed the
3940 logConsole's "position" from "fixed" to "absolute" to avoid
3943 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3945 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
3946 empty the contact view when the current contact is being deleted.
3948 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
3949 parse the email field and provide the address full name if found
3950 as the "contactFN" parameter.
3952 * UI/WebServerResources/generic.js (openMailTo): do not give a
3953 name to the opened window so that serveral ones can be opened at
3956 * UI/MailPartViewers/UIxMailPartTextViewer.m
3957 ([UIxMailPartTextViewer -flatContentAsString]): override method by
3958 replacing carriage returns with "<br />" in the result string from
3959 super's implementation.
3961 * UI/Contacts/UIxContactView.m ([UIxContactView
3962 -_urlOfType:aType]): don't manage non-mailto urls through
3963 javascript, let the user decide what's best for him.
3965 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3966 -newAction]): transfer all the query parameters by using the
3967 "asURLParameters"'s result string from [self queryParameters].
3969 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3970 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
3971 query parameters and put their values (if any) into the snapshot.
3973 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
3974 carriage-returns to "<br />".
3975 ([UIxContactView -workCompany]): explicitly initialize company to
3976 nil if org is nil or empty.
3978 * UI/WebServerResources/UIxContactEditor.js: updated validation
3979 code after we added and renamed some fields.
3981 * UI/WebServerResources/ContactsUI.js: added code to cache contact
3982 cards and to handle card updates.
3984 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3986 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
3987 test the length of the returned string since they will never be
3990 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
3991 return self if the process went successful, returns an exception
3992 otherwise (and only otherwise...).
3994 * OGoContentStore/OCSContactFieldExtractor.m
3995 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
3996 adapted method to the new VCard api. Since the cards are stored in
3997 vcard format, we no longer deal with a dictionary but with a
4000 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4002 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4003 return a string with a "mailto" url.
4004 ([UIxContactView -_urlOfType:aType]): generic method to return a
4005 url string with a html anchor pointing to it.
4007 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4008 since subclass "UIxContactEditor" did nothing. Implemented code to
4009 display and modify the values parsed from the vcards, displayed in
4010 a way similar to the Thunderbird addressbook.
4012 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4013 -save]): new dummy method.
4015 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4016 -save]): made method void.
4018 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4020 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4021 display blocks of data à la Thunderbird Addressbook. If data is
4022 available, those wrappers (around the NGVCard methods) will
4023 enclose the results in a proper HTML output with the correct label
4024 (if present), otherwise it will return an empty string.
4025 ([UIxContactView -vcardAction]): new action to return the contact
4026 as text/vcard (for exporting).
4028 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4029 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4031 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4032 -vCard]): create a new NGVCard instance when no data is available
4034 ([SOGoContactGCSEntry -save]): save the vCard using the new
4035 "versitString" API method/message.
4037 * UI/Contacts/UIxContactView.h: separated interface from
4040 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4041 views and display them beneath the list.
4043 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4045 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4046 the timezone even when it's the server timezone.
4048 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4049 -privateContacts:inContext:]): no long configure the calendar
4050 object with the user's timezone since it's now accessible
4051 application-wide throught the SOGoObject methods.
4053 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4054 method. Removed the "backendTimeZone" method.
4056 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4057 instead of SoComponent.
4059 * SoObjects/Appointments/SOGoAppointmentObject.m:
4060 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4061 [self serverTimeZone] instead of "EST" (which was removed).
4063 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4064 "timeZone" ivar and its accessors.
4066 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4067 centralized method returing the timezone configured in the
4068 userdefaults db or "Canada/Eastern" if missing.
4069 ([SOGoObject -userTimeZone]): new centralized method returing the
4070 timezone of the current user or the server timezone if missing
4071 from the user configuration table.
4073 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4075 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4078 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4079 return a path based on the object's context instead of the first
4080 level in SOGo's object hierarchy...
4082 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4084 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4087 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4088 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4089 avoid a confusion with the days.
4091 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4094 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4095 imitate Sunbird's synchronization between the 3 visible views.
4097 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4098 sure the numbers in dateString are formatted so as to take 4 chars
4099 for the year and 2 for the day and the month, otherwise
4100 NSCalendarDate will return a nil date.
4101 ([UIxComponent -applicationPath]): return a path based on the
4102 object's context instead of the second level in SOGo's object
4105 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4107 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4108 user's timezone abbreviation to the date string passed as parameter to
4109 NSCalendarDate to generate an accurate date instance. Do the same
4110 when no date is specified and today is chosen.
4112 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4113 form's time values to integers before comparing them.
4115 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4116 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4117 dates timezone with [self viewTimeZone].
4119 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4120 "viewTimeZone" ivar destined to hold an instance of the user's
4122 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4125 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4127 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4128 rearranged the layout.
4130 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4131 manage showing and hiding appointment details.
4133 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4134 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4135 timezone by taking the current user's timezone setting.
4137 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4139 * SoObjects/Appointments/SOGoAppointmentObject.m
4140 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4141 set default timezone to EST, although this code should be
4142 rewritten to handle a system and a user default value.
4144 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4145 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4146 take the values from the hour and minute INPUTs when data is
4147 POSTed since we no longer use the UIxTimeSelector component.
4148 ([UIxTimeDateControl -selectableHours])
4149 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4150 template SELECTs to display reasonable and acceptable values
4151 instead of all the possibilities.
4153 * UI/WebServerResources/generic.js: adapted code for the new
4154 implementation of the UIxContactSelector component (added a
4155 "remove" button, removed the previous INPUT and replaced them with
4156 links of class "button").
4158 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4159 UIxTimeDateControl.m.
4161 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4162 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4163 returns correctly formatted values used as attributes for JS code.
4165 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4166 -initialContactsAsString]): renamed implementation of
4167 initialParticipants.
4168 ([UIxContactSelector -currentContactId])
4169 ([UIxContactSelector -currentContactName]): new methods used when
4170 listing the initial contacts in the widget. Currently, both return
4171 the person's cn but the latter should ultimately return a user
4174 * UI/Contacts/UIxContactSelector.h: separated interface from
4175 UIxContactSelector.m.
4177 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4178 all javascript code is now put in Scheduler.js/generic.js.
4180 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4181 moved into NSCalendarDate+Scheduler instead.
4183 * SoObjects/Appointments/SOGoAppointmentFolder.m
4184 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4185 configure the timezone from SOGoUserFolder when the instance is
4187 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4188 the value of the new "timezone" ivar.
4190 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4192 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4193 the date selector in the first page and the container of the
4194 future calendar selector in the second page.
4196 * UI/WebServerResources/generic.js: added code for handling tabbed
4199 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4200 returns the bundle name associated to the current running product.
4202 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4204 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4205 exception by invoking a timeout on the opener rather than invoking
4206 the list refresh method.
4208 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4211 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
4212 ([UIxCalWeekView -prevWeekQueryParameters])
4213 ([UIxCalWeekView -nextWeekQueryParameters])
4214 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4215 that return the dates relatively to the current day.
4216 ([UIxCalWeekView -lastWeekName])
4217 ([UIxCalWeekView -currentWeekName])
4218 ([UIxCalWeekView -nextWeekName])
4219 ([UIxCalWeekView -weekAfterNextWeekName])
4220 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4221 methods that returns the label for the corresponding weeks.
4223 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4224 used by UIxCalDayView and UIxCalWeekView to display the events
4225 occuring in one or more days.
4227 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4229 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4230 entries in the new "monthMenu" and "yearMenu".
4232 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4233 method to return the current day as a string formatted depending
4234 on the current locale.
4236 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4237 ([UIxCalAptListView -endDate]): "today" is now the default filter
4238 for displayed events.
4239 ([UIxCalAptListView -currentSerialDay]): new method returning the
4240 date of the current enumerated appointment in serial form
4243 * UI/WebServerResources/SchedulerUI.js: added code to select the
4244 relevant day when an appointment is selected. Added code to popup
4245 a month and a year menu whenever the header entries are clicked in
4246 the calendar widget.
4248 * UI/WebServerResources/generic.js: made addClassName and
4249 removeClassName methods of HTMLElement.
4251 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4253 * UI/WebServerResources/MailerUI.js: fixed the contact creation
4254 from email addresses.
4256 * UI/WebServerResources/generic.js: centralized the search-related
4257 functions here since the same code was used across the 3
4260 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4261 ([UIxCalAptListView -endDate]): return the required dates needed
4262 depending on the value given to the "filterpopup" url parameter.
4264 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
4265 code by invoking UIxComponent's labelForKey:.
4267 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
4268 [self pageResourceManager] instead of [self resourceManager].
4270 * UI/Contacts/UIxContactEditorBase.m: invokes
4271 globallyUniqueObjectId on the clientobject's class instead of the
4272 hardcoded "SOGoFolder".
4274 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4275 -newAction]): redirect the "new" action to the personal (default)
4278 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4279 +objectWithName:inContainer:]): new constructor.
4281 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4282 -lookupContactWithId:recordId]): always create a contact object,
4283 even if it does not exist.
4285 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4287 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
4288 component that lays out the different components of SOGoCalendar.
4289 Only serves as an Objective-C counterpart to its xml template.
4291 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
4294 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
4295 display a widget to handle the information displayed in the
4296 appointments list. Not currently used, lacks implementation.
4298 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
4299 display a calendar as a dynamic widget from where one can select
4300 the current visible day.
4302 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
4303 extracted from UIxCalInlineMonthOverview.m.
4305 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
4306 calendarPageURL methods. The javascript code is handled by .js
4307 files as much as possible...
4309 * UI/WebServerResources/ContactsUI.js,
4310 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
4313 * UI/WebServerResources/SchedulerUI.js: implemented functions to
4314 handle the new widgets. XmlHTTPRequest code taken from
4317 * UI/WebServerResources/generic.js: put some functions related to
4318 element selections as methods to HTMLElement and HTMLTableElement.
4320 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
4321 display the list of appointments (embodies the code-size of
4322 UIxCalAptListView; answers to the "aptlist" method).
4324 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4326 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
4327 -correctURLAction]): new short action method replacing the method
4328 below by taking far less code.
4330 * SoObjects/Appointments/SOGoAppointmentFolder.m
4331 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
4332 with an action in the view-related code.
4334 * UI/Scheduler/UIxAppointmentEditor.m: invoke
4335 "stringByEscapingHTMLString" on the resulting value to avoid
4336 issues with accented characters.
4337 ([-jsCode]): removed method since the javascript code was merged
4338 into SchedulerUI.js.
4340 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4342 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
4343 new class method that returns an iCalPerson based on the UID given
4346 * UI/Contacts/UIxContactsListViewContainerBase.m:
4347 UIxContactsListViewContainer renamed to serve as a base class for
4348 the contact lists in both the contact editor and the contact
4351 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4352 ([SOGoContactLDAPFolder
4353 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
4354 setUserIdentifier:setRootDN:]): an LDAP field specifying the
4355 loginname of the users can now be specified.
4357 * UI/WebServerResources/generic.js: added code to manage contact
4358 lists through the new implementation of the UIxContactSelector.
4360 * UI/Templates: put the templates related to SchedulerUI in its
4363 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4364 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
4365 entry for "uid" with the field name representing the login name of
4366 the user in the corresponding LDAP branch.
4368 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4370 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4371 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
4372 request is a PUT, always create an entry, even if we're not sure
4375 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4377 * UI/WebServerResources/ContactsUI.js: implemented live-search.
4379 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4380 -appendSystemSourcesInContext:context]): populated method with
4381 code that creates entries mapped to instances SOGoContactFolder,
4382 based on the configuration found in the NSUserDefaults under the
4383 key "SOGoLDAPAddressBooks".
4384 ([SOGoContactFolders
4385 -lookupName:nameinContext:contextacquire:acquire]):
4386 "contactsources" do not exist anymore, SOGoContactFolder was split
4387 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
4388 and one protocol: SOGOContactFolder, instead.
4389 ([SOGoContactFolders -contactFolders]): new accessor used by the
4390 views of SOGoContactXXXFolder to list the possible sources.
4392 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
4393 defines the methods that UIxContactsView, ..Editor and so on...
4396 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
4397 defines the methods that UIxContactsListViewBase expects as well
4398 as the data fields returned in the contact lists.
4400 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
4401 returns entries an LDAP server. Conforms to the new
4402 SOGOContactFolder protocol.
4404 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
4405 returns a vCard based on contact entries from an LDAP server.
4406 Conforms to the new SOGOContactObject protocol.
4408 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
4409 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
4410 entry for the textual representation of the vCard.
4412 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
4415 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
4416 "SOGoContactObject".
4418 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
4419 method that generates a textual representation of the vcard.
4421 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
4423 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
4424 "SOGoContactFolder".
4426 * SoObjects/Contacts/SOGoContactSource.h,
4427 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
4430 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4431 -singleAttributeWithName:key]): new method that returns the first
4432 object associated with an ldap key (where generally one value is
4435 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
4436 map the entry into an NSDictionary for processing by
4437 UIxContactsListViewBase.m with the least possible overhead.
4439 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
4442 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4444 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4445 -privateContacts:inContext:]): now returns an instance of
4448 * UI/Contacts/UIxContactsListViewContainer.m
4449 ([UIxContactsListViewContainer -contactFolderName]): new method to
4450 return the absolute path to the current contact folder, called
4451 from within the template.
4453 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4454 JS code to initialize the 'currentContactFolder' generic var.
4456 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
4457 +contactFolderWithSource:inContainer:andName:]): new class
4458 method meant to return an instance connected to the specified
4459 source. Currently useless but won't be anymore in the next few
4462 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
4463 the "lookupFreeBusyObject" method since it does not exist.
4465 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
4466 as a "view" for the SOGoContactFolders object. Does nothing but
4467 redirect the browser to the URL of the personal address book of
4468 the user. It does not even have a template.
4470 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
4471 implementing the SOGoContactSource protocol. Does nothing
4472 currently but will be used to implement access to the personal
4473 address book of the user stored in the SOGo database.
4475 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
4476 protocol defining an API common to all possible types of contact
4479 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
4480 serving as the root of the contact folders available to the
4481 current user. Correctly lists the contact sources in webdav.
4483 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4485 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
4486 -composeAction]): new action method that permits external object
4487 to write a message from the default (primary) account.
4489 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4490 -initSnapshot]): new method with code taken from "defaultAction"
4491 but needed for others.
4492 ([UIxContactEditorBase -writeAction]): new action designed to
4493 compose the correct URL needed to obtain the MailerUI's email
4494 editor with the correct "mailto" parameter.
4496 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
4497 Common so that other modules can use it.
4499 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
4500 easier to manage both ajax and non-ajax requests.
4502 * UI/Contacts/UIxContactsFilterPanel.m: clone of
4503 UIxMailFilterPanel, but applicable to contact lists.
4505 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
4506 -vcardContentFromSOGoContactRecord]): use the new standard methods
4507 created for each type of entry. If a line is determined to not
4508 contain information, it will be skipped.
4510 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4511 +initialize]): init defaultMailDomain with the user default
4512 "SOGoDefaultMailDomain".
4514 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4516 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4517 -saveAction]): reorganized methods to only have ONE return point.
4518 Invoke saveRecord: directly on the clientObject instead of
4519 saveContentString, which does the same thing anyway.
4521 * SoObjects/Contacts/NSDictionary+Contact.m
4522 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
4523 method to convert the dictionary returned with the user submission
4524 to a record in VCARD format to be stored in the database.
4526 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4528 * UI/WebServerResources/MailerUI.js: when opening the context menu
4529 of the message list, select the message below the mouse cursor and
4530 deselect the other selected messages temporarily. This mimics the
4531 behaviour of Thunderbird for that matter and was already
4532 implemented for the entries of the folder tree.
4534 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
4535 -iconForMenuItem]): new method that returns the fully qualified
4536 relative URL to the icon representing the mailbox, or the default
4537 mailbox icon if needed.
4539 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4540 -urlForResourceFilename:filename]): automatically return an empty
4541 string whenever the filename passed as argument is nil.
4543 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
4544 "desc" parameter set to 1 so that they are sorted in descending
4545 order by default. Also, added "onHeaderClick()", triggered by
4546 clicking on the message list header elements.
4548 * UI/MailerUI/UIxMailSortableTableHeader.m
4549 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
4551 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4552 -isSortedDescending]): defaults to "YES" when the sort order is
4555 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4557 * UI/WebServerResources/MailerUI.js:
4558 - message cache: set the max num of cached messages to 20. Limit
4559 the cached message size to 30000 bytes.
4560 - ajax: when a message request is called while one is already
4561 being performed, the latter will be cancelled. Idem when
4562 retrieving the content of a mailbox.
4563 - folder tree: when a mailbox is selected because of the URL
4564 requested (initMailboxSelection), the dtree is expanded throughout
4565 the mailbox entry's parent hierarchy to ensure it is made visible
4566 when the page is being displayed. (new function: expandUpperTree).
4567 - mailbox loading: when loading a mailbox where a message was
4568 previously selected, we invoke its url with the "pageforuid"
4569 parameter correctly specified. During callback processing, we scan
4570 the table for the related row and reselect it.
4571 Also, the message area is set blank before loading any mailbox.
4573 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4574 -defaultAction]): if the "pageforuid" parameter is passed in the
4575 url, take its value and invoke [self firstMessageOfPageFor:]
4576 consequently to deduce the first message to display. Otherwise,
4577 set it to "idx", otherwise set it to 0.
4578 ([UIxMailListView -firstMessageOfPageFor:]): new method
4579 that determines the first message of the page where the message
4580 passed as parameter is contained.
4582 * UI/WebServerResources/UIxMailListView.js: removed this module,
4583 its code was put in MailerUI.js instead.
4585 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4587 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
4588 which returns the nodes for the parent specified in "parentMenu".
4589 Used to generate the javascript code for the folder dtree.
4591 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
4592 using that container-template are now using UIxMailMainFrame
4593 since UIxMailPanelFrame had no real interest. File removed.
4595 * UI/WebServerResources/dtree.{css,js}: new files to handle
4596 javascript-generated mailbox tree. Modified from original version
4597 by integrating the previous code with the one we are using for
4598 selections and mailbox handling. Minor visual enhancements too...
4600 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4602 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
4603 returned, put it in an NSArray before returning it (fixes
4606 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4608 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
4609 that returns a url string stripped from its "http://hostname"
4612 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
4614 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
4616 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4618 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
4619 -mailDateFormatter]): retrieve the timezone from the user settings
4620 and pass it to the returned dateFormatter. Also, the dateFormatter
4621 is kept in a static variable to avoid useless
4622 creations/destructions.
4624 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
4625 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
4627 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
4628 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
4629 s/Criteria/Text/ to handle the "criteria" form parameter.
4631 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4633 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
4634 to integrate better with the firefox look&feel. Added entries for
4635 the new "menu" DIV class (popup menus).
4637 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
4638 takes any chunk of text as param, detects the user email and the
4639 optional first and last names and return them in a well-formatted
4640 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
4641 namespace conflict. Added "onMenuClick(node, event, menuId)" to
4642 handle popup menus through "onclick" element attributes (node =
4643 this, event = event and menuId = name of the menu DIV id to
4646 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4647 -snapshot]): add an entry for "email" into the snapshot
4648 dictionary if a "contactEmail" URL parameter was detected and if
4649 the entry for "email" is empty.
4651 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
4652 button now invokes the newContact() js function in ContactsUI.js
4653 instead of opening "new" directly. newContact() pops up a window
4654 stripped from its navigation bar.
4656 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
4657 bundle (AddressBook).
4659 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
4660 "menu" and id "addressMenu" have the header email addresses
4661 display it with the new menu code in generic.js.
4663 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
4664 replaced the body tables with a div of class "pageContent"
4665 (standardization across the page templates).
4667 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
4668 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
4669 those are now inherited from UIxPageFrame.
4671 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
4673 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
4674 a "mailto" URL parameter is detected and the "to" array is empty,
4675 initialize "to" with the value of "mailto" before returning it.
4677 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
4678 -composeAction]): rewrote method in a cleaner way and with usage
4679 of the URL extensions to NSString and NSDictionary (see below).
4680 Also, if a "mailto" url parameter is detected, pass it to the
4683 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
4686 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
4687 returns a parameter string to add to a base URL.
4689 * UI/Common/NSString+URL.m ([NSString
4690 -composeURLWithAction:parameters:andHash:useHash]): new method to
4691 compose a complete URL from an object URL with parameters and an
4692 optional '#' character.
4694 * UI/Common/UIxPageFrame.h: separated interface from
4697 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
4699 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
4701 * UI/WebServerResources/generic.js: added code to manage
4702 selections within HTML containers.
4704 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
4705 added method to determine the possible URL for a product-specific
4706 javascript filename of the forme <productname>.js.
4707 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
4708 ([UIxPageFrame -isPopup]): new method to determine whether the
4709 application navigator bar should be displayed (main page) or not
4712 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4713 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
4714 the user through LDAP.
4716 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4718 * The toolbar code from the MailerUI product was taken, renamed as
4719 "UIxToolBar" and put into UI/Common. Toolbar plists were created
4720 for the Contacts and Scheduler products and put in their respectir
4721 Toolbars/ subdirectories. Finally,
4722 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
4723 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
4724 and an invocation to the UIxToolbar component was put at the top
4725 of UI/Templaces/UIxPageFrame.wox.
4727 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
4728 within the templates whether a separator should be displayed.
4730 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
4731 that returns NO if the toolbar is empty.
4733 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4735 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
4737 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
4738 new toolbar objects.
4740 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
4742 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
4743 linkbanner as a DIV instead of a TABLE.
4745 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
4747 returns 'YES' to request the display of the navigation bar between
4750 2006-06-15 ludovic@inverse.ca
4752 * It's now possible to set the default
4753 domain using for email using the
4754 SOGoDefaultMailDomain preference key.
4756 2006-06-15 ludovic@inverse.ca
4758 * Initial import of SOGo from trunk.