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