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