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