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