]> err.no Git - scalable-opengroupware.org/blob - ChangeLog
1f675d5fb9dcd4583ec46ccb82843dd2791ed9b1
[scalable-opengroupware.org] / ChangeLog
1 2007-03-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2
3         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
4         -toManyRelationshipKeys]): don't put the predefined folders in the
5         list if they are returned by the server.
6
7         * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
8         longer store the "flattenedBlocks" in a dictionary since the
9         object will be deleted anyway and we don't need to put the folders
10         in cache.
11
12         * UI/MailPartViewers/UIxMailPartHTMLViewer.m
13         ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
14         attachment path into account when computing the part urls.
15
16 2007-03-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17
18         * UI/Contacts/UIxContactsListViewContainer.m
19         ([UIxContactsListViewContainer -additionalFolders]): take the list
20         of subscribed folders from the new property list used for the user
21         settings. The value of its key is SubscribedFolders for the
22         dictionary entry named "Contacts".
23
24         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
25         -canAccessContentAction]): new method to override the one from
26         UIxFoldersActions by taking into account the fact that, this time,
27         the clientObject is an ldap folder. Removed many method that used
28         to be related to the handling of the user selector.
29
30         * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
31         to make sure they can be removed.
32
33         * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
34         populate the calendar entries based on the user settings plist.
35
36         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
37         -selectForMailerAction]): restored method.
38
39         * UI/Scheduler/UIxCalendarSelector.m: new template module derived
40         from a simplified version of the old UIxContactEditor (removed).
41
42         * UI/Contacts/UIxContactsUserFolders.m: new template module for
43         selecting users or user folders through an LDAP search of which
44         the results are displayed as a tree.
45
46         * UI/WebServerResources/UIxMailEditor.js: moved previous generic
47         method "onContactAdd" here since the Mailer is now the only module
48         to use it when composing emails.
49
50         * UI/WebServerResources/generic.js: added code for handling the
51         new scheme used for describing SOGo folders, common code to handle
52         folder addition or removal.
53
54         * UI/Common/UIxFolderActions.m ([UIxFolderActions
55         -activateFolderAction]): new method that change the "active"
56         settings in the folder-related fields in the user settings.
57         ([UIxFolderActions -deactivateFolderAction]): see above.
58
59         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
60         -checkRightsAction]): removed method.
61
62         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
63         -updateAdditionalAddressBooksAction]): removed method.
64
65         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
66         -updateCalendarsAction]): removed method.
67
68 2007-03-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
69
70         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
71         -checkRightsAction]): removed method.
72
73         * UI/Common/UIxFolderActions.m ([UIxFolderActions
74         -canAccessContentAction]): new method designed to replace
75         [UIxCalMainView checkRightsAction] in a more universal way.
76
77 2007-03-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
78
79         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
80         -roleOfUser:uidinContext:context]): take all the subkeys into
81         account, not only the "personal" folder.
82
83         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
84         -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
85         to the new components.
86
87         * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
88         (see below).
89
90         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
91         -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
92         field of the sogo_user_profile table, where the user-customizable
93         changes will be saved.
94         ([AgenorUserManager -getUserSettingsForUID:uid]): new method
95         similar to the one above, using the "settings" field where the
96         automatic settings will be saved.
97
98         * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
99         module to bind the userdefaults to a property list contained in a
100         specified field of the sogo_user_profile table.
101         ([AgenorUserDefaults
102         -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
103         added a "fieldName" parameter.
104
105         * UI/Common/UIxFolderActions.m: new module implementing web
106         actions common to all GCS-based folders.
107
108 2007-03-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
109
110         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
111         put a carriage return after the day name.
112
113         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
114         -readFreeBusyAction]): restored method.
115
116 2007-03-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
117
118         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
119         -defaultAction]): remade module to redirect automatically to the
120         Calendar url.
121
122         * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
123
124 2007-03-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
125
126         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
127         -deleteAction]): new web method to delete personal addressbook
128         folders.
129
130         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
131         -delete]): override method to refuse the deletion of the folder if
132         its nameInContainer is "personal".
133
134         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
135         that forwards the deletion request to the folder manager.
136
137 2007-03-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
138
139         * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
140         -zoomList]): new method that returns the list of available zoom factors.
141
142         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
143         -changeStatusAction]): rewrote method.
144
145         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
146         -_handleAttendeesEdition]): make sure "attendeesNames" has a
147         length > 0 before computing the attendees. Otherwise there will be
148         an invalid empty entry.
149         ([UIxComponentEditor -_handleOrganizer]): new method that adds the
150         organizer when there are attendees and remove it when the
151         attendees are removed.
152
153 2007-03-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
154
155         * UI/Scheduler/UIxAttendeesEditor.m): new component.
156
157         * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
158         the task and appointment editors. Now a container component
159         handling the common elements of tasks and events.
160
161         * UI/Scheduler/UIxTaskEditor.m: same as below.
162
163         * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
164         a subclass of UIxComponentEditor but a subcomponent of it.
165
166         * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
167         toolbar can have the special value "none" to indicate there is
168         none attached to the window.
169
170         * SoObjects/Appointments/SOGoCalendarComponent.m
171         ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
172         method.
173         ([SOGoCalendarComponent -isParticipant:email]): new method.
174         ([SOGoCalendarComponent -calendar:create]): takes one parameter
175         "create" which is a boolean indicating whether we want to create
176         the calendar if it does not exist.
177
178 2007-03-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
179
180         * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
181         of a table, the same way the dayly and weekly views have been for
182         a few months now.
183
184 2007-02-09  Helge Hess  <helge.hess@opengroupware.org>
185
186         * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
187           resourcetype
188
189         * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
190           property to point at the user folder
191
192 2007-03-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
193
194         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
195         -userInContext:]): returns "SOGoUser".
196
197         * SoObjects/Appointments/SOGoCalendarComponent.m
198         ([SOGoCalendarComponent -contentAsString]): overriden method that
199         takes the privacy into account and discard the relevant fields if
200         needed by generating a new content string and caching it.
201         ([SOGoCalendarComponent
202         -saveContentString:contentStringbaseVersion:baseVersion]): if the
203         new method above has cached a content string, release it and set
204         it to nil so that it will have to be regenerated in the case it is
205         requested further.
206         ([SOGoCalendarComponent -_filterPrivateComponent:component]):
207         discard the fields that have to be hidden when the card is
208         private.
209
210         * SoObjects/Appointments/SOGoAppointmentFolder.m
211         ([SOGoAppointmentFolder
212         -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
213         sure the cards are now handled as instances of
214         SOGoCalendarComponent instead of SOGoContentObject so that their
215         content string is taking the privacy classifiction into account.
216         ([SOGoAppointmentFolder -_privacySqlString]): new method that
217         generates a query to determine what information can be given and
218         if the card itself has to be shown.
219
220         * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
221         -getICalPersonsFromValue:selectorValue]): removed useless
222         "isAccessRestricted" method.
223
224         * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
225         -setStyle:_style]): test whether the values of orgmail and
226         partmails are null before manipulating them, otherwise SOGo sends
227         a "rangeOfString:" message to an NSNull, which makes it crashes.
228
229         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
230         -extractQuickFieldsFromEvent:_event]): we now use the new
231         "symbolicAccessClass" method from iCalEntity to determine the
232         value of the "classifiction" field.
233         ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
234         as above.
235
236 2007-03-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
237
238         * SoObjects/Appointments/SOGoAppointmentFolder.m
239         ([SOGoAppointmentFolder
240         -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
241         see below, the query is adapted consequently.
242
243         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
244         -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
245         renamed to "classification" and can any integer as value.
246         ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
247         idem.
248
249 2007-02-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
250
251         * UI/MailPartViewers/UIxMailPartHTMLViewer.m
252         ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
253         don't prepend anything to the class and id named. Instead, we
254         make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
255         class.
256
257 2007-02-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
258
259         * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
260         -rolesOfUser:logininContext:context]): if object does not exists
261         (for example when it's being created), the current user has the
262         same rights on it than he/she has on its parent container.
263
264         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
265         -nameExistsInFolder:objectName]): methods that tests if a c_name
266         corresponding to the name passed as parameter is present in the db
267         folder.
268
269 2007-02-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
270
271         * SoObjects/SOGo/SOGoUser.m ([SOGoUser
272         -rolesForObject:objectinContext:context]): test for
273         "rolesOfUser:inContext:" in addition to "roleOfUser:...".
274
275         * SoObjects/Appointments/SOGoCalendarComponent.m
276         ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
277         returns the roles of the user on the container object if the event
278         is uncreated.
279
280 2007-02-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
281
282         * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
283         alternativeViewer a multipart/related message is being handled.
284
285         * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
286         from scratch.
287
288         * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
289         text/html component before text/plain.
290
291         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
292         -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
293         fetching of HTML parts.
294
295         * SoObjects/Appointments/SOGoCalendarComponent.m
296         ([SOGoCalendarComponent -componentTag]): new template method that
297         returns the vcalendar tag of the current object.
298         ([SOGoCalendarComponent -component]): new method that returns the
299         first object matching [self componentTag] within the current
300         calendar object. This method replaces 'firstEventInCalendar:' as
301         well as "firstTaskInCalendar:".
302         ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
303         moved method from SOGoAppointmentObject.m.
304
305 2007-02-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
306
307         * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
308         module which shows each selected user's calendar in a different
309         column instead of mixing their events together.
310
311         * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
312         replaced use of [NSString stringByTrimmingWhiteSpaces] with
313         [NSString stringByTrimmingSpaces].
314
315         * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
316         "cnWithoutQuotes" instead of "cnForDisplay", which no longer
317         exists.
318
319         * UI/Scheduler/UIxCalDayOverview.m,
320         UI/Scheduler/UIxCalDayChartview.m,
321         UI/Scheduler/UIxCalDayListview.m,
322         UI/Scheduler/UIxCalWeekOverview.m,
323         UI/Scheduler/UIxCalWeekChartview.m,
324         UI/Scheduler/UIxCalWeekListview.m,
325         UI/Scheduler/UIxCalInlineMonthOverview.m,
326         UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
327
328 2007-02-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
329
330         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
331         -appendPersonalSourcesInContext:context]): release connectoin
332         channel when everything is done.
333
334         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
335         -newAbAction]): new action method to crate a new contact folder
336         from the web UI.
337
338         * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
339         that requests the folder manager to create a folder table with the
340         specified type at the specified path. The type is taken from [self
341         folderType].
342
343         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
344         -folderType]): implemented.
345
346         * SoObjects/Appointments/SOGoAppointmentFolder.m
347         ([SOGoAppointmentFolder -folderType]): implemented.
348
349         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
350         -appendPersonalSourcesInContext:context]): we now fetch all
351         folders with type "Contact" that belong to the current user.
352         ([SOGoContactFolders -newFolderWithName:name]): new method to
353         create a new contact folder.
354
355         * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
356         resulting url with [NSString+Utilities hostlessURL] instead of
357         using NSURL. This is because the url in question sometimes has a
358         hostname and sometimes not. "hostlessURL" ensure the hostname is
359         removed anyway.
360         ([UIxComponent -applicationPath]): same as above.
361
362 2007-02-08  Ludovic Marcotte <ludovic@inverse.ca>
363
364         * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
365         folders before doing the one on messages.
366
367 2007-02-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
368
369         * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
370         makeObjectsPerform:withObject:withObject: for GNUstep
371         compatibility.
372         
373         * OGoContentStore/GNUmakefile, Protocols/common.make,
374         SoObjects/common.make, UI/common.make: install in
375         GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
376
377 2007-02-07  Ludovic Marcotte <ludovic@inverse.ca>
378
379         * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
380         "Agendas"
381
382 2007-02-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
383
384         * UI/MailerUI/UIxMailTree.m ([UIxMailTree
385         -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
386         for the moment.
387
388         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
389         -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
390         password would be accepted anyway as long as its length was > 0.
391         This can be the case ONLY when LDAP is disabled otherwise we have
392         a serious security issue...
393
394         * SoObjects/Appointments/SOGoAppointmentObject.m
395         ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
396         user is not an organizer nor a participant, he is declared as
397         "Owner" if he owns the calendar the entry where the entry is
398         contained. Other cases should not be possible.
399
400 2007-02-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
401
402         * UI/Contacts/UIxContactEditor.m: display and handle the new
403         Freebusy URL entry.
404
405         * SoObjects/Contacts/SOGoContactLDAPFolder.m
406         ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
407         from the server.
408
409         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
410         -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
411         entry.
412
413 2007-01-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
414
415         * SoObjects/Appointments/SOGoCalendarComponent.m
416         ([SOGoCalendarComponent -sendEMailNotifications]): new method that
417         returns the value of ud "SOGoAppointmentSendEMailNotifications"
418         (iMIP/iTIP).
419         ([SOGoCalendarComponent
420         -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
421
422 2007-01-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
423
424         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
425         -defaultAction]): invoke "flushMailCaches" on [self clientObject]
426         so that the mailbox cache is refreshed everytime the user presses
427         on "get mail". I doubt a mailbox cache really is useful in general
428         anyway.
429
430 2007-01-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
431
432         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
433         -userInContext:]): if the lookup is on "freebusy.ifb" and the
434         username is "anonymous" the user is automatically set to
435         "freebusy".
436
437 2007-01-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
438
439         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
440         -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
441         user with password "freebusy".
442
443         * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
444         -contentAsString]): the default timerange is now 14 days before
445         currentday and 1 month after.
446
447 2007-01-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
448
449         * SoObjects/Appointments/SOGoAppointmentFolder.m
450         ([SOGoAppointmentFolder
451         -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
452         escape the record string in a way suitable with XML encoding.
453
454 2007-01-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
455
456         * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
457         calendar view would not be updated properly.
458
459 2007-01-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
460
461         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
462         -newStartDate]): fix the handling of the component start date
463         depending on the "hm" and the "day" parameters.
464
465         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
466         -roleOfUser:uidinContext:context]): set role of current user to
467         "Assistant" if the object that is accessed is "freebusy.ifb".
468
469         * SoObjects/Appointments/SOGoAppointmentFolder.m
470         ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
471         moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
472         ([SOGoAppointmentFolder
473         -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
474         lookupCalendarFolderForUID: method, which doesn't do security
475         checks.
476
477 2007-01-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
478
479         * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
480         accessor that returns the comma-separated list of users with role
481         "Assistant".
482         ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
483         ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
484         "checkedUsers". Instead, each user is either classified in the
485         list of assistants or the list of delegates.
486
487 2006-12-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
488
489         * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
490         -composeAction]): method imported from removed container modules.
491         ([UIxMailMainFrame -mailFolderName]): method imported from removed
492         container modules.
493
494         * UI/MailerUI/UIxMailPopupView.m: a new special popup component
495         for wrapping UIxMailView with the "popupview" action.
496
497         * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
498         since its the component that displays the same splash screen than
499         the one in Thunderbird/Icedove.
500
501         * UI/MailerUI/UIxMailAccountViewContainer.[hm],
502         UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
503         UI/MailerUI/UIxMailListViewContainer.[hm],
504         UI/MailerUI/UIxMailViewContainer.[hm]: removed
505
506 2006-12-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
507
508         * UI/WebServerResources/HTMLElement.js: replaced the functional
509         selectNode() and deselectNode() functions with select() and
510         deselect() methods of HTMLElement.
511
512         * UI/WebServerResources/ContactsUI.js: cleanup, most of the
513         events are initialized from here now instead of in the HTML code.
514
515         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
516         -checkRightsAction]): new method similar to the one with the same
517         name in UIxCalMainView.m.
518
519         * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
520         code to handle the publishing of freebusy information.
521
522 2006-12-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
523
524         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
525         -checkRightsAction]): new action method that returns a
526         comma-separated list of boolean values matching the right of the
527         current user to "view" (as a permission) each foreign calendar
528         stored in his preferences.
529
530         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
531         new method that sets a customOwner, which can be returned with
532         ownerInContext it set.
533
534         * SoObjects/Appointments/SOGoAppointmentFolder.m
535         ([SOGoAppointmentFolder
536         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
537
538 2006-12-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
539
540         * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
541         below, but for the Contacts and Calendar collections.
542
543         * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
544         new acl facilities method from sope-gdl/GCSFolder.m.
545
546         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
547         -roleOfUser:uidinContext:context]): new method that returns
548         SOGoRole_Assistant when the user is an assistant or a delegate on
549         the "personal" ab object. This is so that setting roles on the
550         SOGoContactFolders object is not required.
551
552 2006-12-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
553
554         * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
555
556         * UI/Contacts/UIxContactsAclsSelection.m: new component specific
557         to the handling of the user selection for the acls.
558
559         * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
560         values from SoPermissions with ones specific to SOGo.
561
562         * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
563         handles the storage for the acls.
564
565         * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
566         class for SOGoAppointmentObject and SOGoTaskObject.
567
568         * UI/Common/UIxAclEditor.[hm]: new component that provides a
569         general editor for folder acls.
570
571         * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
572         renamed.
573         ([NSString -davMethodToObjC]): method that returns the method name 
574         for a DAV property implementation.
575
576         * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
577         NSArray.
578         ([NSArray -stringsWithFormat:format]): new method that returns
579         formatted occurences of the strings stored in the array.
580
581         * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
582         +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
583         subclass module of SoWebDAVValue that supports collections of
584         properties of the same type.
585
586 2006-11-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
587
588         * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
589         -lookupFolder:ofClassNamed:inContext:]): added the ability to
590         configure the name of the SOGoDraftFolders with the ud var
591         "SOGoDraftsFolderName".
592
593 2006-11-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
594
595         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
596         -userTimeZone:username]): new method that returns the timezone for
597         the specified user depending on his preferences and the server
598         defaults
599
600         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
601         -stringForData:partInfo:]): take the encoding into account and
602         translate the text to "normal" before processing the charset data.
603
604 2006-11-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
605
606         * UI/WebServerResources/generic.js: the progress indicator is on
607         when loading the page so we turn it off, and we turn it back on
608         whenever we switch to another module...
609
610         * UI/WebServerResources/SchedulerUI.js: make sure the day view
611         synchronization mechanism works everywhere.
612
613         * UI/WebServerResources/generic.js: the log window is not only
614         visible when UIxDebugEnabled is set.
615
616         * UI/WebServerResources/SchedulerUI.js: the month overview's day
617         cells are now initialized with the DOM event interface methods
618         instead of with html attributes.
619
620         * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
621         headers (should be made configurable at some point)...
622
623         * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
624         "not null" constraint on startdate, enddate, isopaque,
625         participants and partmails.
626
627 2006-11-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
628
629         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
630         -hoursToDisplay]): prevent a crash by retaining the
631         "hoursToDisplay" array after it's created.
632         ([UIxCalDayTable -clickableHourCellClass]): new method for the new
633         clickable hours DIV.
634
635         * UI/WebServerResources/SchedulerUI.js: made the event
636         participation status modification asynchronous, which also fixes a
637         bug where the window would sometimes close before the accept or
638         decline action was completed. Also, adapted the event handling
639         related to the days or weeks view with the new DIV-based layout.
640
641         * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
642
643         * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
644         DIV-based presentation of the days and weeks.
645
646         * SoObjects/Appointments/SOGoTaskObject.m: same as below...
647
648         * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
649         might return an exception so we have to handle it if we don't
650         wanna crash...
651
652 2006-11-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
653
654         * UI/WebServerResources/SchedulerUI.js: updated the list
655         initialization code to use the new event management scheme, adding
656         what was missing to be able to delete events and tasks again.
657
658         * UI/WebServerResources/MailerUI.js: added code to activate the
659         "Get mails" button. Fixed a bug which prevented messages to be
660         deleted.
661
662         * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
663         navigation and focus handling of INPUTs.
664
665 2006-11-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
666
667         * UI/WebServerResources/MailerUI.js: added code to handle the
668         possible drag and drop events to manager in the mail module.
669         Moving messages, opening parent folders, ...
670
671         * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
672         the drag and drop manager as well as the interface to HTMLElement
673         to trigger drag and drop events.
674
675         * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
676         action to move the current message to the mailbox named after the
677         value of parameter "tofolder".
678
679         * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
680         -moveToFolderNamed:folderNameinContext:]): new method base on
681         -trashInContext:.
682
683 2006-11-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
684
685         * UI/WebServerResources/generic.js: added and activated many
686         "load" handlers to configure generic widgets used across the
687         modules. More events are now handled in a DOM-fashion way instead
688         of by setting the relative attributes in the templates.
689
690         * UI/Templates/UIxSortableTableHeader.wox: all the events are
691         declared from the javascript DOM onload handlers.
692
693         * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
694         library.
695
696         * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
697         declared from the javascript DOM onload handlers.
698
699         * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
700         we want everything to be separated from each other, as much as
701         possible.
702
703         * UI/WebServerResources/SOGoDragHandles.js: new module containing
704         the "SOGoDragHandlesInterface", implementing methods that can be
705         attributed to DIV so that they can be used as drag handles.
706
707         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
708         -asQPSubjectString]): initialize the tmp strings with '0' to make
709         sure they don't contain garbage.
710
711 2006-11-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
712
713         * UI/WebServerResources/MailerUI.js: register the messageList
714         table as a dragging source and the leaf of the navigation tree as
715         dnd destinations to the DNDManager.
716
717         * UI/WebServerResources/generic.js: initialize tabs from the
718         "unload" event listener that is added programmatically instead of
719         from the template... Also, added the new DNDManager object.
720
721         * UI/WebServerResources/HTMLTableElement.js: added code to
722         simulate XUL drag n drop events. This code will possibly be moved
723         to HTMLElement.js instead later...
724
725         * SoObjects/Contacts/SOGoContactLDAPFolder.m
726         ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
727         below.
728
729         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
730         -_qualifierForFilter:filter]): only search records which starts
731         with the specified pattern.
732
733 2006-11-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
734
735         * SoObjects/Mailer/SOGoDraftObject.m ([NSString
736         -asQPSubjectString]): new method that returns the special QP
737         string with its qp declaration for email subjects.
738         ([SOGoDraftObject -bodyPartForText]) 
739         ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
740         double-encode data in UTF-8.
741
742         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
743         -newStartDate]): new method to determine the start date depending
744         on the URL parameters, the current day and the current time.
745         ([UIxComponentEditor -toolbar]): new method to determine the
746         filename of the toolbar that should be drawn depending on the
747         ownership and the list of attendees of the task/event wrt to the
748         current user...
749
750         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
751         -setDayStartHour:aStartHour]): adjust the minutes to the next
752         quarter of hour, if not already set to a quarter.
753
754         * UI/WebServerResources/UIxAppointmentEditor.js,
755         UI/WebServerResources/UIxTaskEditor.js: added code to manage start
756         date change.
757
758 2006-11-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
759
760         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
761         -loadValuesFromComponent:component]): handles access class
762         (privacy) and status.
763
764         * UI/Contacts/UIxContactsListViewContainer.m
765         ([UIxContactsListViewContainer -additionalFolders]): return nil if
766         [self additionalAddressBooks] returns an empty string.
767
768 2006-11-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
769
770         * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
771         rangesOf7Days]): enhanced and debugged algorithm to feed the array
772         with slices where the first day is still in the requested month.
773
774         * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
775         non-popup pages.
776
777         * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
778         of events in the day boxes of the calendar's monthly view.
779
780         * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
781         -davContentType]): declare "text/calendar".
782
783         * SoObjects/Appointments/SOGoAppointmentObject.m
784         ([SOGoAppointmentObject -davContentType]): declare
785         "text/calendar".
786
787         * SoObjects/Appointments/SOGoAppointmentFolder.m
788         ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
789         HTTP methods are handled by SOPE and requires nil to be returned,
790         this method now invokes the new
791         "requestNamedIsHandledLater:inContext:" method to check that.
792         ([SOGoAppointmentFolder
793         -requestNamedIsHandledLater:nameinContext:context]): new methods
794         that returns "YES" only for the "OPTIONS" http method (for now...).
795         ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
796         overloaded method to append the "access-control" and
797         "calendar-access" DAV abilities to the initial declaration.
798
799         * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
800         imitate the look of Sunbird/Lightning's monthly view.
801
802         * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
803         UIxCalMonthViewOld.[hm].
804
805 2006-11-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
806
807         * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
808         ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
809         method.
810         ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
811         returns an image name based on the participation status of the
812         current attendee.
813
814         * UI/WebServerResources/SchedulerUI.js: same strip down as for
815         generic.js below.
816
817         * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks]) 
818         ([UIxContactsListViewContainer -additionalFolders]) 
819         ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder]) 
820         ([UIxContactsListViewContainer -currentAdditionalFolder]): new
821         methods to handle the external addressbooks a user has subscribed
822         too, by retriving them from his preferences.
823
824         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
825         -updateAdditionalAddressBooksAction]): new method that updates the
826         user settings with the list of addressbook he has subscribed to.
827
828         * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
829         module for the address book selector.
830
831         * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
832         a toolbar with two buttons ("add" and "remove") to manage the
833         additional addressbooks a user might subscribe to.
834
835         * UI/WebServerResources/ContactsUI.js: added code to handle
836         "external addressbooks" from the Javascript point-of-view, by
837         extending existing methods and adding code for the "add ab" and
838         "remove ab" buttons.
839
840         * UI/WebServerResources/generic.js: moved extensions methods to
841         DOM elements to separate files for better clarity.
842
843         * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
844         new method that returns "pageContent" as class, but also "popup"
845         for the DIV where the page content lies, so that we can manipulate
846         the content of popup's with CSS identifiers.
847
848 2006-10-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
849
850         * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
851         -displayStyle]): new method that returns a string containing the
852         css style relative to the current appointment cell. This code is
853         currently inactive but might be reused later.
854
855         * UI/WebServerResources/SchedulerUI.js: added code to handle the
856         display of the selected day (the day pointed by the mouse, or the
857         current day when changing the view).
858
859         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
860         -dayCellClasses]): new method that returns a string containing the
861         css classes applicable to the current cell, depending on the
862         position of the day in the week, the day of today and the
863         requested day.
864
865         * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
866         -currentContactAptBorder]): new method that returns the
867         appropriate border color for the specified user.
868
869         * SoObjects/Appointments/SOGoAppointmentObject.m
870         ([SOGoAppointmentObject
871         -saveContentString:contentStringbaseVersion:baseVersion]):
872         overloaded method that parse new events and detects if they have
873         an organizer or not. If they are new and have no organizer set
874         (Sunbird/Lightning...), the owner of the event is set as
875         organizer.
876
877         * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
878         category that provides facility methods and interfaces to the
879         AgenorUserManager.
880
881         * SoObjects/Contacts/product.plist: give full access to ANY
882         authenticated user, not just the owner (to every objects...).
883
884 2006-10-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
885
886         * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
887         every replica widgets are declared as such to their master
888         counterpart. Take the days into account when displaying the time
889         range taken by the appointment.
890
891         * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
892         -getICalPersonsFromValue:selectorValue]): method taken from
893         UIxFreeBusyUserSelector, that is shared both by
894         UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
895
896         * SoObjects/Appointments/SOGoAppointmentFolder.m
897         ([SOGoAppointmentFolder
898         -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.
899
900         * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
901         derived and taken as a subset of UIxFreeBusyUserSelector that
902         implements the table part of the FreeBusy view. Most of the
903         methods of UIxFreeBusyUserSelector relative to that table were
904         moved into UIxFreeBusyUserSelectorTable, which can also be used as
905         a standalone view for AJAX operations.
906
907 2006-10-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
908
909         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
910         -vCard]): change reverted.
911
912         * UI/Contacts/UIxContactEditor.m: check whether the client contact
913         folder has selector "globallyUniqueObjectId" before calling that
914         method.
915
916         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
917         -vCard]): the "setVClass" NGVCard method really is "setClass"
918         instead.
919
920         * SoObjects/Contacts/SOGoContactLDAPFolder.m
921         ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
922         request the "streetAddress" instead of the "streetaddress".
923         ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
924         mails that *contain*, and not just *start with* the search
925         pattern.
926
927         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
928         -vCard]): mark address returned from LDAP as the work address.
929
930         * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
931         span covered with the anchor, not only the textual information
932         within.
933
934         * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
935         argument (event or task) to newEvent in the appointmentListMenu.
936         Make the appointmentsListView display the appointmentsListMenu.
937
938         * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
939         12 to 50 before displaying "...".
940         ([SOGoAptFormatter -fullDetailsForApt::]): display location only
941         if its length > 0, whether location itself is nil or not...
942         ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
943         of which the length > 0.
944
945 2006-10-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
946
947         * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
948         french and ISO dates.
949
950         * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
951         from UIxContactSelector to handle contact lists (current and
952         additional contacts).
953
954         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
955         -_freeBusyAsText]): added handling of an "additional"-named query
956         parameter that describe the number of additional days after
957         enddate that should be returned.
958
959         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
960         -_responseForResults:results]): give priority to results with
961         "c_uid" fields. If none returned, use the first contact received.
962
963         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
964         -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
965         2 and "CANCELLED" to 0.
966
967 2006-10-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
968
969         * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
970         of start and end dates to short string dates.
971
972         * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
973         -readFreeBusyAction]): new method that returns an array of numbers
974         corresponding to the state in the freebusy of each "quarter of an
975         hour" between the "sday" and "eday" date parameters passed in the
976         url. This permits to handle the display of the freebusy with Ajax
977         mechanisms.
978         ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
979         since the free busy displays 2 days ahead.
980
981         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
982         -contactSearchAction]): new action that returns the uid and the
983         username + email of the user whose name contain the value of the
984         "search" url parameter.
985
986         * SoObjects/Appointments/SOGoAppointmentFolder.m
987         ([SOGoAppointmentFolder
988         -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
989         useful for the computing of the status of the freebusy.
990
991         * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
992         -init]): new component that incarnates a user selector for events
993         inspired by the new one found in Thunderbird Lightning.
994
995 2006-10-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
996
997         * UI/WebServerResources/generic.js: added code to enable or
998         disable anchor visually (following our internal algorithm).
999
1000         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
1001         added new "url" ivar with its classic accessors.
1002         ([UIxComponentEditor -urlButtonClasses]): new method that returns
1003         the class strings for the url button on the appointment/task
1004         editor (depending on the validity of the url).
1005
1006         * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
1007         UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
1008         the template to match the Lightning's new task/appointment editor.
1009
1010         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
1011
1012         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
1013
1014 2006-10-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1015
1016         * SoObjects/Contacts/SOGoContactLDAPFolder.m
1017         ([SOGoContactLDAPFolder
1018         -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
1019
1020         * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
1021         iCalEntityObject instances instead of just iCalEvent's.
1022
1023         * SoObjects/Appointments/SOGoAppointmentFolder.m
1024         ([SOGoAppointmentFolder
1025         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
1026
1027         * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
1028         bad way of handling ownership that way.
1029
1030         * SoObjects/Contacts/SOGoContactLDAPFolder.m
1031         ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
1032         on "cn", just like Mozilla.
1033
1034 2006-10-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1035
1036         * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
1037         "to" should be retained, otherwise it will be autoreleased and a
1038         crash will occur.
1039
1040         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
1041         -writeAction]): updated method to fetch the card before initing
1042         the snapshot.
1043
1044         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1045         -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
1046         of NSNotFound.
1047
1048         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1049         -iCalStringTemplate]): start and due date are now optional.
1050
1051         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
1052         -setDayStartHour:aStartHour]):  added a new "isDisabled" ivar with
1053         appropriate accessors to be settable through the templates.
1054
1055         * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
1056         new "isDisabled" ivar with appropriate accessors to be
1057         settable through the templates.
1058
1059         * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1060         -availableCalendars]): new method that list the calendars to which
1061         the user has subscribed.
1062         ([UIxComponentEditor -componentOwner]): returns the owner of the
1063         editted object.
1064
1065         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1066         -extractQuickFieldsFromTodo:_task]): set the start and enddate of
1067         quickentries to null whenever each or all of them are null, by
1068         providing an impossible timestamp from with NSNotFound as value.
1069
1070 2006-10-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1071
1072         * UI/WebServerResources/UIxMailEditor.js: update the algorithm
1073         that handles the creation of new fields with the new APIs and the
1074         new node structure on the page.
1075
1076         * UI/Scheduler/UIxAppointmentEditor.m,
1077         UI/Scheduler/UIxTaskEditor.m:
1078         refactored to user UIxComponentEditor as parent class.
1079
1080         * UI/Scheduler/UIxComponentEditor.[hm]: new class module
1081         containing the methods common to the UIxTaskEditor and the
1082         UIxAppointmentEditor.
1083
1084 2006-10-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1085
1086         * SoObjects/Appointments/SOGoAppointmentFolder.m
1087         ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
1088         the handling of time-ranges.
1089
1090         * UI/WebServerResources/ContactsUI.js: specify a notification type as
1091         parameters when onConfirmContactSelection in invoked.
1092
1093         * UI/WebServerResources/generic.js: specify a notification type as
1094         parameters when onContactRemove in invoked.
1095
1096         * UI/WebServerResources/SchedulerUI.js: when the user deselects
1097         all calendars, select his entry.
1098
1099 2006-10-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1100
1101         * UI/WebServerResources/SchedulerUI.js: edit and delete events
1102         with their owner-relative urls. Generate a correct entry in the
1103         css color table when a user is added to the calendars list. Put
1104         the same color next to the user id.
1105
1106         * UI/WebServerResources/generic.js: implemented some new helper
1107         methods.
1108
1109         * SoObjects/Appointments/SOGoAppointmentFolder.m
1110         ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
1111         entries if their owner is not the current user.
1112
1113         * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
1114         -displayClasses]): return the correct class for the current event
1115         representation depending on its owner.
1116
1117         * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
1118         and associate a color for each user login depending on its
1119         position in the list.
1120
1121         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
1122         -currentRowCSSClass]): return the correct class for the current
1123         row depending on the owner of the event.
1124
1125         * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
1126         -setColors:colors]): new method to associate a color table with
1127         each user in the list.
1128
1129         * SoObjects/Appointments/SOGoAppointmentFolder.m
1130         ([SOGoAppointmentFolder
1131         -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
1132
1133         * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
1134         NSObject to associate an instance with a user.
1135
1136 2006-10-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1137
1138         * UI/WebServerResources/SchedulerUI.js: added handling of multiple
1139         calendars.
1140
1141         * UI/WebServerResources/ContactsUI.js: added handling of
1142         notification of changes to contact selectors.
1143
1144         * UI/WebServerResources/generic.js: added handling of notification
1145         of changes to contact selectors.
1146
1147         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
1148         -updateCalendarsAction]): proxy method to update the user
1149         preference table with the new selected calendar uids.
1150
1151         * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1152         -calendarsContactsAction]): new method.
1153
1154         * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes]) 
1155         ([UIxContactSelector -setHasCheckBoxes:aBool]) 
1156         ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
1157         permit the drawing of checkboxes instead of card icons.
1158
1159         * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
1160         wrap a selector the the "Calendars" tab.
1161
1162         * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
1163         new user calendar selector.
1164
1165 2006-10-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1166
1167         * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
1168         may cover hour 0 to hour 23.
1169
1170         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1171         -iCalStringFromQueryParameter:format:]): dates explicitly set to
1172         utc tz.
1173
1174         * UI/WebServerResources/SchedulerUI.js: manage both lists of
1175         objects wrt to the toolbar actions.
1176
1177         * UI/WebServerResources/generic.js: added code to the "String"
1178         class to decode number-encoded char entities.
1179
1180         * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
1181         -batchDeleteAction]): new method to delete selected entries in the
1182         lists.
1183
1184         * SoObjects/Appointments/SOGoAppointmentFolder.m
1185         ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
1186         that delete identified entries in batch.
1187
1188         * UI/SOGoUI/UIxComponent.m ([UIxComponent
1189         -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
1190
1191         * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
1192         UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1193         -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
1194         -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
1195         -saveAction]):
1196         return a UIxJSClose component if everything went fine.
1197
1198         * UI/Scheduler/UIxTaskEditor.h: interface extracted from
1199         UIxTaskEditor.m.
1200
1201         * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
1202         UIxAppointmentEditor.m.
1203
1204         * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
1205         a very light page with javascript code to close a window, by
1206         calling a method on the opener if specified. This component is
1207         designed to work as a response to form postings.
1208
1209 2006-10-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1210
1211         * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
1212         SOGoAppointmentObject adapted for the handling of tasks.
1213
1214         * SoObjects/Appointments/NSArray+Appointments.[hm]: category
1215         extracted from SOGoAppointmentObject.
1216
1217         * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1218         -saveUrl]): returns the url needed to POST the new form to.
1219         redirect the user to <aptid>/editAsAppointment instead of /edit,
1220         so that SOGoAppointmentFolder can return the correct object type.
1221
1222         * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
1223         -compareAptsAscending:_other]): accept empty start or end dates.
1224
1225         * SoObjects/Appointments/SOGoAppointmentFolder.m
1226         ([SOGoAppointmentFolder
1227         -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.
1228         ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
1229         components of type "vtodo" as well as "vevent".
1230         ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
1231         url specified ends with AsTask or AsAppointment, returns the
1232         an object of the appropriate class, otherwise deduce it from its
1233         content if the HTTP method is "PUT", otherwise read its type from
1234         the quick table.
1235
1236         * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1237         -extractQuickFieldsFromTodo:_task]): extract quick fields from
1238         tasks.
1239
1240         * UI/Scheduler/UIxCalView.m ([UIxCalView
1241         -fetchCoreAppointmentsInfos]): replacement methods for
1242         fetchCoreInfos but by retrieving object with component "vevent".
1243         ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
1244         components.
1245
1246         * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
1247         UIxCalAptListView adapted for the handling of tasks.
1248
1249         * UI/Scheduler/UIxTaskProposal.[hm],
1250         UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
1251         clones of the UIxAppointment* classes for the handling of tasks.
1252
1253         * UI/WebServerResources/UIxTaskEditor.js: clone of
1254         UIxAppointmentEditor adapted for the handling of tasks.
1255
1256         * UI/WebServerResources/SchedulerUI.js: added support for tasks.
1257         Scroll the daily view to the appropriate hour when an appointment
1258         is selected in the appointments list.
1259
1260 2006-10-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1261
1262         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
1263         -setDayStartHour:aStartHour]): specifies the user timezone on the
1264         given date.
1265
1266         * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
1267         as timezone.
1268
1269         * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate]) 
1270         ([NSCalendarDate -driftedDate]): methods made useless by a better
1271         comprehension of the NSTimeZone API...
1272
1273 2006-10-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1274
1275         * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
1276         new methods from the NSCalendarDate methods.
1277
1278         * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
1279         extending UI/Scheduler/NSCalendarDate+Scheduler.m.
1280         ([NSCalendarDate
1281         +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).
1282         ([NSCalendarDate -adjustedDate]): this method returns another
1283         instance set to the correct hour after the original date was set
1284         from a non-GMT timezone. This date can be used for storage.
1285         ([NSCalendarDate -driftedDate]): this method does exactly the
1286         opposite of -adjutedDate, that is, it enables the method
1287         hourOfDay, minuteOfHour etc... to return the values according to
1288         the original date's timezone. This date CANNOT be used for storage.
1289
1290         * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
1291         -shortDateString]): new method that will return a "short date
1292         string" (yyyymmdd) from a calendar date object.
1293
1294         * UI/SOGoUI/UIxComponent.m ([UIxComponent
1295         -_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.
1296
1297         * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
1298         to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
1299
1300 2006-10-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1301
1302         * UI/WebServerResources/SchedulerUI.js: added code to scroll the
1303         view of the day at the height of hour 8:00.
1304
1305         * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
1306         ([UIxCalView -dayEndHour]): returns 24.
1307
1308         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction]) 
1309         ([UIxContactFoldersView -newAction]): invoke
1310         _selectActionForApplication: on self with the proper attribute too.
1311
1312         * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
1313         we now use the action mechanism in UIxContactsListView to keep the
1314         same view for the contact selectors and the regular contact view.
1315
1316         * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
1317         UIxContactsListViewContainerBase.[hm]
1318
1319         * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
1320
1321         * UI/WebServerResources/generic.js: generalized emailstring
1322         handling functions. Generalized address book access functions.
1323
1324         * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
1325         -isPopup]): return YES if the "popup" query parameter is set.
1326
1327         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1328         -defaultAction]): keep the url parameters when redirecting.
1329         ([UIxContactFoldersView -selectForSchedulerAction]) 
1330         ([UIxContactFoldersView -selectForMailerAction]): new action
1331         methods for the /scheduler-contacts and /mailer-contacts invocations.
1332
1333         * SoObjects/SOGo/SOGoObject.m: compose the action url using the
1334         newly available NSString+URL category.
1335
1336         * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
1337         -asURLParameters]): handle dictionary entries which could be
1338         instances of NSArray rather than NSString.
1339
1340         * SoObjects/SOGo/NSString+URL.m ([NSString
1341         -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
1342         ([NSString -urlWithoutParameters]): new method that returns the
1343         url without its parameters.
1344
1345         * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
1346
1347         * SoObjects/SOGo/NSDictionary+URL.[hm],
1348         UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
1349
1350         * UI/WebServerResources/UIxMailEditor.js: add support for
1351         additions of different types (to, cc, bcc) of recipients from the
1352         address book.
1353
1354         * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
1355         "<?xml..." header.
1356
1357         * UI/Contacts/UIxContactsMailerSelection.m,
1358         UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
1359         UI/Contacts/UIxContactsSelectionView.m to provide a different set
1360         of widgets depending on the application invoking the contact list.
1361
1362 2006-09-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1363
1364         * UI/WebServerResources/ContactsUI.js: hide the current contact
1365         whenever the user changes of contact folder.
1366
1367         * UI/WebServerResources/UIxContactEditor.js: the contact UID is
1368         now provided by the template when loading the page.
1369
1370         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
1371         -iCalPersonWithUid:uid]): new method taken from removed module
1372         'iCalPerson+UIx';
1373
1374 2006-09-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1375
1376         * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
1377         -categoriesAsString]): same as below.
1378
1379         * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
1380         vcalendar API's iCalEvent instead of the removed SOGoAppointment.
1381
1382         * SoObjects/Appointments/SOGoAppointmentObject.m
1383         ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
1384         ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
1385         helper method.
1386
1387         * SoObjects/Appointments/SOGoAppointmentFolder.m
1388         ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
1389         hackish test to detect whether the request concernes VEVENT's or
1390         anything else. Return events only in the former case.
1391         ([SOGoAppointmentFolder
1392         -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
1393         c_name quickfield so that the calendar list can identify the
1394         appointments with their complete "filename".
1395
1396         * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
1397         groupsOfClass:fromSource: to parse the given vcalendar.
1398
1399         * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
1400
1401         * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
1402
1403         * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
1404         obsolete class.
1405
1406         * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
1407
1408 2006-09-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1409
1410         * SoObjects/Appointments/SOGoAppointmentFolder.m
1411         ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
1412         sensitive to the CalDAV method names.
1413         ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
1414         "calendar-query" CalDAV method name.
1415
1416         * UI/WebServerResources/ContactsUI.js: removed a lot of useless
1417         code coming originally from MailerUI.js.
1418
1419         * UI/WebServerResources/UIxContactEditor.js: imitate the
1420         Thunderbird address book by completing the display name with the
1421         content of the first and last name fields, until the display name
1422         is modified manually.
1423
1424         * UI/WebServerResources/generic.js: added a "trim" method to the
1425         String class.
1426
1427         * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
1428         -displayName]): new method that returns the display name from "cn"
1429         or from the "displayName" key if found.
1430
1431         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
1432         -initSnapshot]): check if "[card n]" returns anything to avoid a
1433         crash.
1434
1435         * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
1436         that returns an unparsed doctype definition for the pages.
1437
1438         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1439         -vCard]): set the card's fn to attribute "displayName" if found
1440         before "cn".
1441
1442 2006-09-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1443
1444         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1445         -vCard]): handle the "streetAddress" and "l" fields.
1446
1447         * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
1448         header fields by converting the tables to DIVs and SPANs.
1449
1450         * UI/WebServerResources/generic.css: attempted unification of font
1451         families and size across all the elements. changed the
1452         logConsole's "position" from "fixed" to "absolute" to avoid
1453         performance issues.
1454
1455 2006-09-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1456
1457         * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
1458         empty the contact view when the current contact is being deleted.
1459
1460         * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
1461         parse the email field and provide the address full name if found
1462         as the "contactFN" parameter.
1463
1464         * UI/WebServerResources/generic.js (openMailTo): do not give a
1465         name to the opened window so that serveral ones can be opened at
1466         the same time.
1467
1468         * UI/MailPartViewers/UIxMailPartTextViewer.m
1469         ([UIxMailPartTextViewer -flatContentAsString]): override method by
1470         replacing carriage returns with "<br />" in the result string from
1471         super's implementation.
1472
1473         * UI/Contacts/UIxContactView.m ([UIxContactView
1474         -_urlOfType:aType]): don't manage non-mailto urls through
1475         javascript, let the user decide what's best for him.
1476
1477         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1478         -newAction]): transfer all the query parameters by using the
1479         "asURLParameters"'s result string from [self queryParameters].
1480
1481         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
1482         -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
1483         query parameters and put their values (if any) into the snapshot.
1484
1485         * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
1486         carriage-returns to "<br />".
1487         ([UIxContactView -workCompany]): explicitly initialize company to
1488         nil if org is nil or empty.
1489
1490         * UI/WebServerResources/UIxContactEditor.js: updated validation
1491         code after we added and renamed some fields.
1492
1493         * UI/WebServerResources/ContactsUI.js: added code to cache contact
1494         cards and to handle card updates.
1495
1496 2006-09-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1497
1498         * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
1499         test the length of the returned string since they will never be
1500         nil.
1501
1502         * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
1503         return self if the process went successful, returns an exception
1504         otherwise (and only otherwise...).
1505
1506         * OGoContentStore/OCSContactFieldExtractor.m
1507         ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
1508         adapted method to the new VCard api. Since the cards are stored in
1509         vcard format, we no longer deal with a dictionary but with a
1510         NGVCard object...
1511
1512 2006-09-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1513
1514         * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
1515         return a string with a "mailto" url.
1516         ([UIxContactView -_urlOfType:aType]): generic method to return a
1517         url string with a html anchor pointing to it.
1518
1519         * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
1520         since subclass "UIxContactEditor" did nothing. Implemented code to
1521         display and modify the values parsed from the vcards, displayed in
1522         a way similar to the Thunderbird addressbook.
1523
1524         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1525         -save]): new dummy method.
1526
1527         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1528         -save]): made method void.
1529
1530 2006-09-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1531
1532         * UI/Contacts/UIxContactView.m: added many wrapper methods to
1533         display blocks of data Ã  la Thunderbird Addressbook. If data is
1534         available, those wrappers (around the NGVCard methods) will
1535         enclose the results in a proper HTML output with the correct label
1536         (if present), otherwise it will return an empty string.
1537         ([UIxContactView -vcardAction]): new action to return the contact
1538         as text/vcard (for exporting).
1539
1540         * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1541         +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
1542
1543         * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1544         -vCard]): create a new NGVCard instance when no data is available
1545         and retain it.
1546         ([SOGoContactGCSEntry -save]): save the vCard using the new
1547         "versitString" API method/message.
1548
1549         * UI/Contacts/UIxContactView.h: separated interface from
1550         UIxContactView.m.
1551
1552         * UI/WebServerResources/ContactsUI.js: add-ed code to download card
1553         views and display them beneath the list.
1554
1555 2006-09-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1556
1557         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
1558         the timezone even when it's the server timezone.
1559
1560         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1561         -privateContacts:inContext:]): no long configure the calendar
1562         object with the user's timezone since it's now accessible
1563         application-wide throught the SOGoObject methods.
1564
1565         * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
1566         method. Removed the "backendTimeZone" method.
1567
1568         * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
1569         instead of SoComponent.
1570
1571         * SoObjects/Appointments/SOGoAppointmentObject.m: 
1572         ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
1573         [self serverTimeZone] instead of "EST" (which was removed).
1574
1575         * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
1576         "timeZone" ivar and its accessors.
1577
1578         * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
1579         centralized method returing the timezone configured in the
1580         userdefaults db or "Canada/Eastern" if missing.
1581         ([SOGoObject -userTimeZone]): new centralized method returing the
1582         timezone of the current user or the server timezone if missing
1583         from the user configuration table.
1584
1585 2006-09-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1586
1587         * UI/WebServerResources/SchedulerUI.js: implemented caching of
1588         date selectors.
1589
1590         * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
1591         return a path based on the object's context instead of the first
1592         level in SOGo's object hierarchy...
1593
1594 2006-09-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1595
1596         * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
1597         be clicked.
1598
1599         * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
1600         timezone ([self viewTimeZone]) to the WEMonthOverview component to
1601         avoid a confusion with the days.
1602
1603         * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
1604         can now be clicked.
1605
1606         * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
1607         imitate Sunbird's synchronization between the 3 visible views.
1608
1609         * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
1610         sure the numbers in dateString are formatted so as to take 4 chars
1611         for the year and 2 for the day and the month, otherwise
1612         NSCalendarDate will return a nil date.
1613         ([UIxComponent -applicationPath]): return a path based on the
1614         object's context instead of the second level in SOGo's object
1615         hierarchy...
1616
1617 2006-09-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1618
1619         * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
1620         user's timezone abbreviation to the date string passed as parameter to
1621         NSCalendarDate to generate an accurate date instance. Do the same
1622         when no date is specified and today is chosen.
1623
1624         * UI/WebServerResources/UIxAppointmentEditor.js: convert the
1625         form's time values to integers before comparing them.
1626
1627         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime]) 
1628         ([UIxCalAptListView -currentEndTime]): initialize the resulting
1629         dates timezone with [self viewTimeZone].
1630
1631         * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
1632         "viewTimeZone" ivar destined to hold an instance of the user's
1633         timezone in memory.
1634         ([UIxComponent -viewTimeZone]): take the timezone from the user's
1635         prefs.
1636
1637 2006-08-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1638
1639         * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
1640         rearranged the layout.
1641
1642         * UI/WebServerResources/UIxAppointmentEditor.js: added code to
1643         manage showing and hiding appointment details.
1644
1645         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1646         -privateContacts:inContext:]): init the SOGoAppointmentFolder's
1647         timezone by taking the current user's timezone setting.
1648
1649         * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
1650
1651         * SoObjects/Appointments/SOGoAppointmentObject.m
1652         ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
1653         set default timezone to EST, although this code should be
1654         rewritten to handle a system and a user default value.
1655
1656         * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
1657         -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
1658         take the values from the hour and minute INPUTs when data is
1659         POSTed since we no longer use the UIxTimeSelector component.
1660         ([UIxTimeDateControl -selectableHours]) 
1661         ([UIxTimeDateControl -selectableMinutes]): new methods used by the
1662         template SELECTs to display reasonable and acceptable values
1663         instead of all the possibilities.
1664
1665         * UI/WebServerResources/generic.js: adapted code for the new
1666         implementation of the UIxContactSelector component (added a
1667         "remove" button, removed the previous INPUT and replaced them with
1668         links of class "button").
1669
1670         * UI/Scheduler/UIxTimeDateControl.h: separated interface from
1671         UIxTimeDateControl.m.
1672
1673         * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay]) 
1674         ([UIxCalDayTable -currentAppointmentHour]): new methods that
1675         returns correctly formatted values used as attributes for JS code.
1676
1677         * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
1678         -initialContactsAsString]): renamed implementation of
1679         initialParticipants.
1680         ([UIxContactSelector -currentContactId]) 
1681         ([UIxContactSelector -currentContactName]): new methods used when
1682         listing the initial contacts in the widget. Currently, both return
1683         the person's cn but the latter should ultimately return a user
1684         fullname.
1685
1686         * UI/Contacts/UIxContactSelector.h: separated interface from
1687         UIxContactSelector.m.
1688
1689         * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
1690         all javascript code is now put in Scheduler.js/generic.js.
1691
1692         * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
1693         moved into NSCalendarDate+Scheduler instead.
1694
1695         * SoObjects/Appointments/SOGoAppointmentFolder.m
1696         ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
1697         configure the timezone from SOGoUserFolder when the instance is
1698         being created.
1699         ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
1700         the value of the new "timezone" ivar.
1701
1702 2006-08-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1703
1704         * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
1705         the date selector in the first page and the container of the
1706         future calendar selector in the second page.
1707
1708         * UI/WebServerResources/generic.js: added code for handling tabbed
1709         views.
1710
1711         * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
1712         returns the bundle name associated to the current running product.
1713
1714 2006-08-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1715
1716         * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
1717         exception by invoking a timeout on the opener rather than invoking
1718         the list refresh method.
1719
1720         * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
1721         removed method.
1722
1723         * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters]) 
1724         ([UIxCalWeekView -prevWeekQueryParameters]) 
1725         ([UIxCalWeekView -nextWeekQueryParameters]) 
1726         ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
1727         that return the dates relatively to the current day.
1728         ([UIxCalWeekView -lastWeekName]) 
1729         ([UIxCalWeekView -currentWeekName]) 
1730         ([UIxCalWeekView -nextWeekName]) 
1731         ([UIxCalWeekView -weekAfterNextWeekName]) 
1732         ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
1733         methods that returns the label for the corresponding weeks.
1734
1735         * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
1736         used by UIxCalDayView and UIxCalWeekView to display the events
1737         occuring in one or more days.
1738
1739 2006-08-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1740
1741         * UI/Scheduler/UIxCalMainView.m: extended class to populate the
1742         entries in the new "monthMenu" and "yearMenu".
1743
1744         * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
1745         method to return the current day as a string formatted depending
1746         on the current locale.
1747
1748         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate]) 
1749         ([UIxCalAptListView -endDate]): "today" is now the default filter
1750         for displayed events.
1751         ([UIxCalAptListView -currentSerialDay]): new method returning the
1752         date of the current enumerated appointment in serial form
1753         (yyyymmdd).
1754
1755         * UI/WebServerResources/SchedulerUI.js: added code to select the
1756         relevant day when an appointment is selected. Added code to popup
1757         a month and a year menu whenever the header entries are clicked in
1758         the calendar widget.
1759
1760         * UI/WebServerResources/generic.js: made addClassName and
1761         removeClassName methods of HTMLElement.
1762
1763 2006-08-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1764
1765         * UI/WebServerResources/MailerUI.js: fixed the contact creation
1766         from email addresses.
1767
1768         * UI/WebServerResources/generic.js: centralized the search-related
1769         functions here since the same code was used across the 3
1770         applications.
1771
1772         * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate]) 
1773         ([UIxCalAptListView -endDate]): return the required dates needed
1774         depending on the value given to the "filterpopup" url parameter.
1775
1776         * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
1777         code by invoking UIxComponent's labelForKey:.
1778
1779         * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
1780         [self pageResourceManager] instead of [self resourceManager].
1781
1782         * UI/Contacts/UIxContactEditorBase.m: invokes
1783         globallyUniqueObjectId on the clientobject's class instead of the
1784         hardcoded "SOGoFolder".
1785
1786         * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1787         -newAction]): redirect the "new" action to the personal (default)
1788         contact folder.
1789
1790         * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1791         +objectWithName:inContainer:]): new constructor.
1792
1793         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1794         -lookupContactWithId:recordId]): always create a contact object,
1795         even if it does not exist.
1796
1797 2006-08-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1798
1799         * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
1800         component that lays out the different components of SOGoCalendar.
1801         Only serves as an Objective-C counterpart to its xml template.
1802
1803         * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
1804         from its .m file.
1805
1806         * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
1807         display a widget to handle the information displayed in the
1808         appointments list. Not currently used, lacks implementation.
1809
1810         * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
1811         display a calendar as a dynamic widget from where one can select
1812         the current visible day.
1813
1814         * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
1815         extracted from UIxCalInlineMonthOverview.m.
1816
1817         * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
1818         calendarPageURL methods. The javascript code is handled by .js
1819         files as much as possible...
1820
1821         * UI/WebServerResources/ContactsUI.js,
1822         UI/WebServerResources/MailerUI.js: adapted to the code refactoring
1823         in generic.js.
1824
1825         * UI/WebServerResources/SchedulerUI.js: implemented functions to
1826         handle the new widgets. XmlHTTPRequest code taken from
1827         MailerUI.js.
1828
1829         * UI/WebServerResources/generic.js: put some functions related to
1830         element selections as methods to HTMLElement and HTMLTableElement.
1831
1832         * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
1833         display the list of appointments (embodies the code-size of
1834         UIxCalAptListView; answers to the "aptlist" method).
1835
1836 2006-08-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1837
1838         * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
1839         -correctURLAction]): new short action method replacing the method
1840         below by taking far less code.
1841
1842         * SoObjects/Appointments/SOGoAppointmentFolder.m
1843         ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
1844         with an action in the view-related code.
1845
1846         * UI/Scheduler/UIxAppointmentEditor.m: invoke
1847         "stringByEscapingHTMLString" on the resulting value to avoid
1848         issues with accented characters.
1849         ([-jsCode]): removed method since the javascript code was merged
1850         into SchedulerUI.js.
1851
1852 2006-08-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1853
1854         * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
1855         new class method that returns an iCalPerson based on the UID given
1856         as param.
1857
1858         * UI/Contacts/UIxContactsListViewContainerBase.m: 
1859         UIxContactsListViewContainer renamed to serve as a base class for
1860         the contact lists in both the contact editor and the contact
1861         selectors.
1862
1863         * SoObjects/Contacts/SOGoContactLDAPFolder.m
1864         ([SOGoContactLDAPFolder
1865         -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
1866         setUserIdentifier:setRootDN:]): an LDAP field specifying the
1867         loginname of the users can now be specified.
1868
1869         * UI/WebServerResources/generic.js: added code to manage contact
1870         lists through the new implementation of the UIxContactSelector.
1871
1872         * UI/Templates: put the templates related to SchedulerUI in its
1873         own directory.
1874
1875         * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
1876         -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
1877         entry for "uid" with the field name representing the login name of
1878         the user in the corresponding LDAP branch.
1879
1880 2006-08-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1881
1882         * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1883         -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
1884         request is a PUT, always create an entry, even if we're not sure
1885         it does exist.
1886
1887 2006-08-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1888
1889         * UI/WebServerResources/ContactsUI.js: implemented live-search.
1890
1891         * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1892         -appendSystemSourcesInContext:context]): populated method with
1893         code that creates entries mapped to instances SOGoContactFolder,
1894         based on the configuration found in the NSUserDefaults under the
1895         key "SOGoLDAPAddressBooks".
1896         ([SOGoContactFolders
1897         -lookupName:nameinContext:contextacquire:acquire]):
1898         "contactsources" do not exist anymore, SOGoContactFolder was split
1899         into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
1900         and one protocol: SOGOContactFolder, instead.
1901         ([SOGoContactFolders -contactFolders]): new accessor used by the
1902         views of SOGoContactXXXFolder to list the possible sources.
1903
1904         * SoObjects/Contacts/SOGoContactObject.h: new protocol that
1905         defines the methods that UIxContactsView, ..Editor and so on...
1906         can expect.
1907
1908         * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
1909         defines the methods that UIxContactsListViewBase expects as well
1910         as the data fields returned in the contact lists.
1911
1912         * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
1913         returns entries an LDAP server. Conforms to the new
1914         SOGOContactFolder protocol.
1915
1916         * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
1917         returns a vCard based on contact entries from an LDAP server.
1918         Conforms to the new SOGOContactObject protocol.
1919
1920         * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
1921         ([NGVCardSimpleValue -vCardEntryString]): generates the correct
1922         entry for the textual representation of the vCard.
1923
1924         * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
1925         extension.
1926
1927         * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
1928         "SOGoContactObject".
1929
1930         * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
1931         method that generates a textual representation of the vcard.
1932
1933         * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
1934
1935         * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
1936         "SOGoContactFolder".
1937
1938         * SoObjects/Contacts/SOGoContactSource.h,
1939         SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
1940         protocols.
1941
1942         * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
1943         -singleAttributeWithName:key]): new method that returns the first
1944         object associated with an ldap key (where generally one value is
1945         returned by key).
1946         ([NGLdapEntry
1947         -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
1948         map the entry into an NSDictionary for processing by
1949         UIxContactsListViewBase.m with the least possible overhead.
1950
1951         * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
1952         extension.
1953
1954 2006-08-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1955
1956         * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1957         -privateContacts:inContext:]): now returns an instance of
1958         SOGoContactFolders.
1959
1960         * UI/Contacts/UIxContactsListViewContainer.m
1961         ([UIxContactsListViewContainer -contactFolderName]): new method to
1962         return the absolute path to the current contact folder, called
1963         from within the template.
1964
1965         * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
1966         JS code to initialize the 'currentContactFolder' generic var.
1967
1968         * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
1969         +contactFolderWithSource:inContainer:andName:]): new class
1970         method meant to return an instance connected to the specified
1971         source. Currently useless but won't be anymore in the next few
1972         days.
1973
1974         * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
1975         the "lookupFreeBusyObject" method since it does not exist.
1976
1977         * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
1978         as a "view" for the SOGoContactFolders object. Does nothing but
1979         redirect the browser to the URL of the personal address book of
1980         the user. It does not even have a template.
1981
1982         * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
1983         implementing the SOGoContactSource protocol. Does nothing
1984         currently but will be used to implement access to the personal
1985         address book of the user stored in the SOGo database.
1986
1987         * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
1988         protocol defining an API common to all possible types of contact
1989         sources.
1990
1991         * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
1992         serving as the root of the contact folders available to the
1993         current user. Correctly lists the contact sources in webdav.
1994
1995 2006-08-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1996
1997         * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
1998         -composeAction]): new action method that permits external object
1999         to write a message from the default (primary) account.
2000
2001         * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
2002         -initSnapshot]): new method with code taken from "defaultAction"
2003         but needed for others.
2004         ([UIxContactEditorBase -writeAction]): new action designed to
2005         compose the correct URL needed to obtain the MailerUI's email
2006         editor with the correct "mailto" parameter.
2007
2008         * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
2009         Common so that other modules can use it.
2010
2011         * UI/Contacts/UIxContactsListViewContainer.m: container to make it
2012         easier to manage both ajax and non-ajax requests.
2013
2014         * UI/Contacts/UIxContactsFilterPanel.m: clone of
2015         UIxMailFilterPanel, but applicable to contact lists.
2016
2017         * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
2018         -vcardContentFromSOGoContactRecord]): use the new standard methods
2019         created for each type of entry. If a line is determined to not
2020         contain information, it will be skipped.
2021
2022         * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2023         +initialize]): init defaultMailDomain with the user default
2024         "SOGoDefaultMailDomain".
2025
2026 2006-08-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2027
2028         * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
2029         -saveAction]): reorganized methods to only have ONE return point.
2030         Invoke saveRecord: directly on the clientObject instead of
2031         saveContentString, which does the same thing anyway.
2032
2033         * SoObjects/Contacts/NSDictionary+Contact.m
2034         ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
2035         method to convert the dictionary returned with the user submission
2036         to a record in VCARD format to be stored in the database.
2037
2038 2006-08-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2039
2040         * UI/WebServerResources/MailerUI.js: when opening the context menu
2041         of the message list, select the message below the mouse cursor and
2042         deselect the other selected messages temporarily. This mimics the
2043         behaviour of Thunderbird for that matter and was already
2044         implemented for the entries of the folder tree.
2045
2046         * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
2047         -iconForMenuItem]): new method that returns the fully qualified
2048         relative URL to the icon representing the mailbox, or the default
2049         mailbox icon if needed.
2050
2051         * UI/SOGoUI/UIxComponent.m ([UIxComponent
2052         -urlForResourceFilename:filename]): automatically return an empty
2053         string whenever the filename passed as argument is nil.
2054
2055         * UI/WebServerResources/MailerUI.js: open the mailboxes with the
2056         "desc" parameter set to 1 so that they are sorted in descending
2057         order by default. Also, added "onHeaderClick()", triggered by
2058         clicking on the message list header elements.
2059
2060         * UI/MailerUI/UIxMailSortableTableHeader.m
2061         ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
2062
2063         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2064         -isSortedDescending]): defaults to "YES" when the sort order is
2065         not specified.
2066
2067 2006-07-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2068
2069         * UI/WebServerResources/MailerUI.js:
2070         - message cache: set the max num of cached messages to 20. Limit
2071         the cached message size to 30000 bytes.
2072         - ajax: when a message request is called while one is already
2073         being performed, the latter will be cancelled. Idem when
2074         retrieving the content of a mailbox.
2075         - folder tree: when a mailbox is selected because of the URL
2076         requested (initMailboxSelection), the dtree is expanded throughout
2077         the mailbox entry's parent hierarchy to ensure it is made visible
2078         when the page is being displayed. (new function: expandUpperTree).
2079         - mailbox loading: when loading a mailbox where a message was
2080         previously selected, we invoke its url with the "pageforuid"
2081         parameter correctly specified. During callback processing, we scan
2082         the table for the related row and reselect it.
2083         Also, the message area is set blank before loading any mailbox.
2084
2085         * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2086         -defaultAction]): if the "pageforuid" parameter is passed in the
2087         url, take its value and invoke [self firstMessageOfPageFor:]
2088         consequently to deduce the first message to display. Otherwise,
2089         set it to "idx", otherwise set it to 0.
2090         ([UIxMailListView -firstMessageOfPageFor:]): new method
2091         that determines the first message of the page where the message
2092         passed as parameter is contained.
2093
2094         * UI/WebServerResources/UIxMailListView.js: removed this module,
2095         its code was put in MailerUI.js instead.
2096
2097 2006-07-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2098
2099         * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
2100         which returns the nodes for the parent specified in "parentMenu".
2101         Used to generate the javascript code for the folder dtree.
2102
2103         * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
2104         using that container-template are now using UIxMailMainFrame
2105         since UIxMailPanelFrame had no real interest. File removed.
2106
2107         * UI/WebServerResources/dtree.{css,js}: new files to handle
2108         javascript-generated mailbox tree. Modified from original version
2109         by integrating the previous code with the one we are using for
2110         selections and mailbox handling. Minor visual enhancements too...
2111
2112 2006-07-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2113
2114         * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
2115         returned, put it in an NSArray before returning it (fixes
2116         bug#217).
2117
2118 2006-07-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2119
2120         * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
2121         that returns a url string stripped from its "http://hostname"
2122         prefix.
2123
2124         * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
2125
2126         * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
2127
2128 2006-07-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2129
2130         * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
2131         -mailDateFormatter]): retrieve the timezone from the user settings
2132         and pass it to the returned dateFormatter. Also, the dateFormatter
2133         is kept in a static variable to avoid useless
2134         creations/destructions.
2135
2136         * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
2137         -setTimeZone:newTimeZone]): new accessor to specify the timezone.
2138
2139         * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:]) 
2140         ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
2141         s/Criteria/Text/ to handle the "criteria" form parameter.
2142
2143 2006-07-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2144
2145         * UI/WebServerResources/uix.css: enhanced the toolbar appearance
2146         to integrate better with the firefox look&feel. Added entries for
2147         the new "menu" DIV class (popup menus).
2148
2149         * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
2150         takes any chunk of text as param, detects the user email and the
2151         optional first and last names and return them in a well-formatted
2152         way. Renamed "getSelection" to "getSelectedNodes" to avoid a
2153         namespace conflict. Added "onMenuClick(node, event, menuId)" to
2154         handle popup menus through "onclick" element attributes (node =
2155         this, event = event and menuId = name of the menu DIV id to
2156         popup).
2157
2158         * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
2159         -snapshot]): add an entry for "email" into the snapshot
2160         dictionary if a "contactEmail" URL parameter was detected and if
2161         the entry for "email" is empty.
2162
2163         * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
2164         button now invokes the newContact() js function in ContactsUI.js
2165         instead of opening "new" directly. newContact() pops up a window
2166         stripped from its navigation bar.
2167
2168         * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
2169         bundle (AddressBook).
2170
2171         * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
2172         "menu" and id "addressMenu" have the header email addresses
2173         display it with the new menu code in generic.js.
2174
2175         * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
2176         replaced the body tables with a div of class "pageContent"
2177         (standardization across the page templates).
2178
2179         * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
2180         productJavaScriptURL and pageJavaScriptURL (conditionnally) since
2181         those are now inherited from UIxPageFrame.
2182
2183         * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
2184
2185         * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
2186         a "mailto" URL parameter is detected and the "to" array is empty,
2187         initialize "to" with the value of "mailto" before returning it.
2188
2189         * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
2190         -composeAction]): rewrote method in a cleaner way and with usage
2191         of the URL extensions to NSString and NSDictionary (see below).
2192         Also, if a "mailto" url parameter is detected, pass it to the
2193         redirected url.
2194
2195         * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
2196         reduce code.
2197
2198         * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
2199         returns a parameter string to add to a base URL.
2200
2201         * UI/Common/NSString+URL.m ([NSString
2202         -composeURLWithAction:parameters:andHash:useHash]): new method to
2203         compose a complete URL from an object URL with parameters and an
2204         optional '#' character.
2205
2206         * UI/Common/UIxPageFrame.h: separated interface from
2207         UIxPageFrame.m.
2208
2209 2006-07-07  Wsourdeau Sourdeau  <wsourdeau@inverse.ca>
2210
2211         * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
2212
2213         * UI/WebServerResources/generic.js: added code to manage
2214         selections within HTML containers.
2215
2216         * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
2217         added method to determine the possible URL for a product-specific
2218         javascript filename of the forme <productname>.js.
2219         ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
2220         ([UIxPageFrame -isPopup]): new method to determine whether the
2221         application navigator bar should be displayed (main page) or not
2222         (popup page).
2223
2224         * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2225         -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
2226         the user through LDAP.
2227
2228 2006-07-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2229
2230         * The toolbar code from the MailerUI product was taken, renamed as
2231         "UIxToolBar" and put into UI/Common. Toolbar plists were created
2232         for the Contacts and Scheduler products and put in their respectir
2233         Toolbars/ subdirectories. Finally,
2234         UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
2235         UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
2236         and an invocation to the UIxToolbar component was put at the top
2237         of UI/Templaces/UIxPageFrame.wox.
2238
2239         * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
2240         within the templates whether a separator should be displayed.
2241
2242         * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
2243         that returns NO if the toolbar is empty.
2244
2245 2006-07-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2246
2247         * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
2248
2249         * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
2250         new toolbar objects.
2251
2252         * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
2253
2254         * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
2255         linkbanner as a DIV instead of a TABLE.
2256
2257         * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
2258         showLinkBanner]:
2259         returns 'YES' to request the display of the navigation bar between
2260         applets.
2261
2262 2006-06-15      ludovic@inverse.ca
2263
2264         * It's now possible to set the default
2265           domain using for email using the
2266           SOGoDefaultMailDomain preference key.
2267
2268 2006-06-15      ludovic@inverse.ca
2269         
2270         * Initial import of SOGo from trunk.