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