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