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