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