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