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