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