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