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