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