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