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