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