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