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