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