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