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