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