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