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