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