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