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