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