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