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