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