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