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