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